Hallo Raphael,
die Leerattribute (xmlns="") sind eigentlich ganz einfach zu erklären: Du verwendest Techniken zum Aufbau deines
XML-Dokuments, die ab CoXMLDOMDocument40 nur beim Arbeiten ohne Namespaces funktionieren. Sobald du mit Namespaces arbeitest musst du anders vorgehen. Die Methode CreateElement() erzeugt ein neues Element grundsätzlich ohne Namespace, also auch nicht im Default Namespace. Um ein Element im Default (oder einem beliebigen) NameSpace zu erzeugen musst du die Methode CreateNode() verwenden:
Delphi-Quellcode:
var
nsDef:
string;
nPackage, nSender, nUser: IXMLDOMNode;
begin
nsDef := '
http://innosolv.ch/namespace/isag';
// ...
nPackage := root.appendChild(xmlDoc.createNode(NODE_ELEMENT, '
package', nsDef));
nSender := nPackage.appendChild(xmlDoc.createNode(NODE_ELEMENT, '
sender', nsDef));
nUser := nSender.appendChild(xmlDoc.createElement('
user'));
// ...
end;
Bei der Beschaffung von Knotenreferenzen über XPATH wirst du im Zusammenhang mit dem Default Namespace über ein weiteres Problem stolpern, das
an anderer Stelle bereits beleuchtet wurde. Ich würde in deinem Fall die eingefügten Knoten zwischenspeichern, wenn du sie später noch mal brauchst.
Grüße vom marabu