Forums Neueste Beiträge
 

Knoten einfügen

07/05/2008 - 00:09 von Mike Wesling | Report spam
Hallo,

ich muss in einem XML-File einen Knoten bei bestimmten Elementen
einfügen. Die Elemente sollen per XPath-Ausdruck ermittelt werden. Die
XML-Datei überschreibt den Default-Namespace mit àhnlichem Wert wie dem
hier: xmlns="http://www.meineseite.abc".

Zunàchst hatte ich das Problem, dass durch diese Namespace-Angabe meine
XPath-Ausdrücke alle ins Leere gelaufen sind, da wohl nicht mehr im
richtigen Namespace gesucht wurde.

Ich hab nun behelfsweise über den "XmlNamespaceManager" ein Mapping
hinzugefügt und bin so wenigstens in der Lage meine Knoten per XPath zu
finden:


XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("C:\\test.xml");

XmlNamespaceManager xmlnsManager = new
XmlNamespaceManager(xmldoc.NameTable);

xmlnsManager.AddNamespace("mm", "http://www.meineseite.abc");

XmlNode node = xmldoc.SelectSingleNode("//mm:MyElement/mm:MySubElement",
xmlnsManager);

XmlElement element = xmldoc.CreateElement("NewElement");
node.AppendChild(element);

xmldoc.Save(@"C:\\test_new.xml");


Mein Problem: in dem neu eingefügten Element-Knoten wird immer
zusàtzlich ein leerer Namespace mit eingefügt. Das neu eingefügt Element
sieht dann wie folgt aus: <NewElement xmlns="" />.

Wieso passiert das denn? Wie kann ich das verhindern?
 

Lesen sie die antworten

#1 Frank Dzaebel
07/05/2008 - 10:04 | Warnen spam
Hallo Mike,

Mein Problem: in dem neu eingefügten Element-Knoten wird immer
zusàtzlich ein leerer Namespace mit eingefügt. Das neu eingefügt Element
sieht dann wie folgt aus: <NewElement xmlns="" />.
Wieso passiert das denn? Wie kann ich das verhindern?



Das passiert nicht, wenn Dein XML zum Beispiel
so aussieht:

<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns:mm="http://www.meineseite.abc">
<mm:MyElement name ="el1">
<mm:MySubElement name="sub11">
</mm:MySubElement>
<mm:MySubElement name="sub12">
</mm:MySubElement>
</mm:MyElement>
</Elements>

Es ensteht dann ggf.
(z.B.: element.InnerText = "Hallo :-)"; )
etwas wie: ...

<mm:MySubElement name="sub11">
<NewElement>Hallo :-)</NewElement>
</mm:MySubElement>


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen