Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   ChildNode sieht nicht aus wie erwartet (https://www.delphipraxis.net/193062-childnode-sieht-nicht-aus-wie-erwartet.html)

sko1 16. Jun 2017 10:03

ChildNode sieht nicht aus wie erwartet
 
Hallo,

ich erzeuge ein XML-Dokument mit folgendem (gekürzten) Code:

Delphi-Quellcode:
function CreateDocumentXML: boolean;
var
  Xml: IXMLDOCUMENT;
  ArchivNode, HeaderNode, ContentNode, DocumentNode, UNode: IXMLNode;
  fn : string;
begin
  Result := false;
  try
    Xml := NewXMLDocument;
    Xml.Encoding := 'utf-8';
    Xml.Options := [doNodeAutoIndent]; // looks better in Editor ;)
    ArchivNode := Xml.AddChild('archive');
    HeaderNode := ArchivNode.AddChild('header');
    ContentNode := ArchivNode.AddChild('content');
    DocumentNode := ContentNode.AddChild('document');
    ArchivNode.Attributes['version'] := '3.0';
    ArchivNode.Attributes['generatingSystem'] := 'Test';
    ArchivNode.Attributes['xmlns:xsi'] := 'http://www.w3.org/2001/XMLSchema-instance';
    ArchivNode.Attributes['xsi:schemaLocation'] := 'http://xml.datev.de/bedi/tps/document/v03.0 document_v030.xsd';
    ArchivNode.Attributes['xmlns'] := 'http://xml.datev.de/bedi/tps/document/v03.0';
    //die beiden Untereinträge
    UNode := HeaderNode.AddChild('date');
    UNode.Text := Formatdatetime('yyyy-mm-dd hh:nn:ss',now);
    UNode := HeaderNode.AddChild('description');
    UNode.Text := 'Datenübergabe';
...
    fn := TPath.Combine(ExportPfad, 'document.xml');
    if TFile.Exists(fn) then
      TFile.Delete(fn);
    Xml.SaveToFile(fn);
  except
    LogAusgabe('Fehler bei Erzeugung document.xml !');
    exit;
  end;
  Result := true;
end;
und bekomme dieses Dokument:
Zitat:

<?xml version="1.0" encoding="utf-8"?>
<archive version="3.0" generatingSystem="Test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xml.datev.de/bedi/tps/document/v03.0 document_v030.xsd" xmlns="http://xml.datev.de/bedi/tps/document/v03.0">
<header xmlns="">
<date>2017-06-16 10:53:25</date>
<description>Datenübergabe</description>
</header>
<content xmlns="">
<document/>
</content>
</archive>
Die fett markierten Einträge möchte ich aber nicht, nur wie bekomm ich die weg?

Ciao
Stefan

sko1 20. Jun 2017 12:27

AW: ChildNode sieht nicht aus wie erwartet
 
Ich pushe dies noch mal, in der Hoffnung dass sich doch noch ein Experte auf dem Gebiet von XML findet, der mir helfen kann...
Bei 255 Hits bisher habe ich noch Hoffnung!

Ciao
Stefan

taveuni 20. Jun 2017 12:35

AW: ChildNode sieht nicht aus wie erwartet
 
Code:
    ArchivNode.Attributes['version'] := '3.0';
    ArchivNode.Attributes['generatingSystem'] := 'Test';
    ArchivNode.Attributes['xmlns:xsi'] := 'http://www.w3.org/2001/XMLSchema-instance';
    ArchivNode.Attributes['xsi:schemaLocation'] := 'http://xml.datev.de/bedi/tps/document/v03.0 document_v030.xsd';
    ArchivNode.Attributes['xmlns'] := 'http://xml.datev.de/bedi/tps/document/v03.0';
Verwendest Du ein Schema? Dieses xsd führt auf jeden Fall ins Nirwana. Ausserdem besetzt Du ja selbst die Attribute xmlns. Ich verstehe die Frage nicht.

rwalper 20. Jun 2017 12:56

AW: ChildNode sieht nicht aus wie erwartet
 
Deinem Parent-Node "ArchivNode" hast Du einen Namespace verpasst, den Childnodes von ArchivNode nicht. Daher wird das leere Namespace-Attribut für genau diese generiert.

Ändere mal folgende Zeilen, indem du "xsi:" voranstellst:
Delphi-Quellcode:
    HeaderNode := ArchivNode.AddChild('xsi:header');
    ContentNode := ArchivNode.AddChild('xsi:content');
Im Result ist dann auch das leere "xmlns" nicht mehr vorhanden.

sko1 21. Jun 2017 08:43

AW: ChildNode sieht nicht aus wie erwartet
 
Danke für den Hinweis, das leere xmlns ist weg, dafür heißt der Node nun "xsi:Header" anstelle "header" !

Was nun?

Ciao
Stefan

sko1 21. Jun 2017 08:46

AW: ChildNode sieht nicht aus wie erwartet
 
Zitat:

Zitat von taveuni (Beitrag 1374978)
Code:
    ArchivNode.Attributes['version'] := '3.0';
    ArchivNode.Attributes['generatingSystem'] := 'Test';
    ArchivNode.Attributes['xmlns:xsi'] := 'http://www.w3.org/2001/XMLSchema-instance';
    ArchivNode.Attributes['xsi:schemaLocation'] := 'http://xml.datev.de/bedi/tps/document/v03.0 document_v030.xsd';
    ArchivNode.Attributes['xmlns'] := 'http://xml.datev.de/bedi/tps/document/v03.0';
Verwendest Du ein Schema? Dieses xsd führt auf jeden Fall ins Nirwana. Ausserdem besetzt Du ja selbst die Attribute xmlns. Ich verstehe die Frage nicht.

Die Attribute von ArchivNode sind von DATEV fest so vergegeben, da habe ich leider keinen Einfluss drauf!

Ciao
Stefan

DeddyH 21. Jun 2017 12:15

AW: ChildNode sieht nicht aus wie erwartet
 
Und wie ist es bei gleichem Namespace?
Delphi-Quellcode:
HeaderNode := ArchivNode.AddChild('header', 'http://xml.datev.de/bedi/tps/document/v03.0');
ContentNode := ArchivNode.AddChild('content', 'http://xml.datev.de/bedi/tps/document/v03.0');
(Natürlich sollte man dann auch eine Konstante verwenden, ist ja nur ein Test).

sko1 22. Jun 2017 06:25

AW: ChildNode sieht nicht aus wie erwartet
 
Danke, genau das war's!

Jetzt erhalte ich das erwartete XML, warum das so ist habe ich leider noch nicht verstanden ;-)

Ciao
Stefan

DeddyH 22. Jun 2017 06:30

AW: ChildNode sieht nicht aus wie erwartet
 
Viel zu lesen: https://msdn.microsoft.com/en-us/library/aa468565.aspx

sko1 22. Jun 2017 10:57

AW: ChildNode sieht nicht aus wie erwartet
 
danke!

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz