XML Namespace

6. Juni 2018 08:29

Guten Morgen,

ich muss gerade eine SOAP Nachricht aufbauen und habe da ein kleines Problem mit dem Namespace.

Code:
lnetXmlDoc := lnetXmlDoc.XmlDocument();
lnetXmlDecl := lnetXmlDoc.CreateXmlDeclaration('1.0', 'UTF-8', '');
lnetXmlDoc.AppendChild(lnetXmlDecl);
lnetXmlElem1 := lnetXmlDoc.CreateElement('s', 'Envelope', 'http://schemas.xmlsoap.org/soap/envelope/');
lnetXmlDoc.AppendChild(lnetXmlElem1);
lnetXmlElem2 := lnetXmlDoc.CreateElement('s:Header');
lnetXmlElem1.AppendChild(lnetXmlElem2);
lnetXmlElem3 := lnetXmlDoc.CreateElement('Action');
lnetXmlElem3.SetAttribute('mustUnderstand', 'http://schemas.microsoft.com/ws/2005/05/addressing/none', '1');
lnetXmlElem3.InnerText := 'Test';
lnetXmlElem2.AppendChild(lnetXmlElem3);


Das Problem ist, dass bei dem Element Header das s: in der Ausgabe nicht vorhanden ist.
Bei dem Atribute mustUnderstand kann ich nicht mal ein s: davor machen, da es dann eine Fehlermeldung gibt.

Gruß
Karl

Re: XML Namespace

6. Juni 2018 08:42

Hat zwar nicht direkt etwas mit deiner Frage zu tun, aber schau dir doch mal die Tabelle 1235 an.
XML Buffer Tabelle aus dem Standard. Vielleicht klappt es damit besser?

Re: XML Namespace

6. Juni 2018 12:00

Hallo,

danke für den Tip.

Ich habe es jetzt so gelöst.
Code:
lnetXmlDoc := lnetXmlDoc.XmlDocument();
lnetXmlDecl := lnetXmlDoc.CreateXmlDeclaration('1.0', 'UTF-8', '');
lnetXmlDoc.AppendChild(lnetXmlDecl);
lnetXmlElem1 := lnetXmlDoc.CreateElement('s', 'Envelope', 'http://schemas.xmlsoap.org/soap/envelope/');
lnetXmlDoc.AppendChild(lnetXmlElem1);
  lnetXmlElem2 := lnetXmlDoc.CreateElement('s', 'Header', 'http://schemas.xmlsoap.org/soap/envelope/');
  lnetXmlElem1.AppendChild(lnetXmlElem2);
    lnetXmlElem3 := lnetXmlDoc.CreateElement('Action');
    lnetXmlElem3.SetAttribute('mustUnderstand', 'http://schemas.xmlsoap.org/soap/envelope/', '1');
    lnetXmlElem3.SetAttribute('xmlns', 'http://schemas.microsoft.com/ws/2005/05/addressing/none');
    lnetXmlElem3.InnerText := 'http://pes-service.de/IEposInterface/GetEntities';
    lnetXmlElem2.AppendChild(lnetXmlElem3);


Es muss so wie es scheint immer der Namespace angegeben werden.
Wenn es diesen schon gibt, dann wird er nicht neu hinzugefügt, sondern der bisherige verwendet.

Gruß
Karl