Ich erstelle eine Ping-Anwendung für die Schule mit einem XML voller URLs. Ich habe eine Stunde verloren, weil dies zu XmlNode.Value
einer Null führte.
Dann habe ich es geändert InnerText
und es hat gut funktioniert.
Jetzt habe ich mich gefragt, was der Unterschied ist, weil MSDN sagt, dass .Value den Wert des Knotens und InnerText
die verketteten Werte des Knotens und aller seiner untergeordneten Knoten zurückgibt.
Kann mir das bitte jemand erklären?
<sites>
<site>
<url>www.test.be</url>
<email>[email protected]</email>
</site>
<site>
<url>www.temp.be</url>
<email>[email protected]</email>
</site>
<site>
<url>www.lorim.ipsum</url>
<email>[email protected]</email>
</site></sites>
Antworten:
Wenn Ihr XML beispielsweise so aussieht,
<Foo>Bar</Foo>
wird "Bar" tatsächlich als separater Knoten betrachtet: alsXmlText
Knoten (untergeordnet vonXmlNode
). DieValue
Eigenschaft diesesXmlText
Knotens wäre "Bar"."Foo" gilt als
XmlElement
(auch untergeordnet vonXmlNode
).XmlNode.Value
Gibt je nach Knotentyp verschiedene Dinge zurück. Siehe diese Tabelle , die zeigt , dassValue
immer wiedernull
fürElement
Knoten.Der
InnerText
Foo-Knoten gibt "Bar" zurück, da er die Werte seiner untergeordneten Knoten verkettet (in diesem Fall nur den einenXmlText
Knoten).quelle
Ich hatte eine ähnliche Situation. Ich habe das erste untergeordnete Element des aktuellen Knotens ausgewählt, überprüft, ob es sich um XML-Text handelt, und dann seinen Wert angezeigt.
XmlNodeList xNList = xDOC.SelectNodes("//" + XMLElementname); foreach (XmlNode xNode in xNList) { if (xNode.ChildNodes.Count == 1 && xNode.FirstChild.GetType().ToString() == "System.Xml.XmlText") { XMLElements.Add(xNode.FirstChild.Value); } else { XMLElements.Add("This is not a Leaf node"); } }
quelle
Die XML-Spezifikation ist sehr wählerisch in Bezug auf die Terminologie und was welchen Typ von XML-Objekt ausmacht. Wie bereits erwähnt,
element
hat keinen Wert. Dies ist spezifisch fürattribute
(und wahrscheinlich auch für einige andere Knotentypen), daattribute
die Syntaxelement
dies nicht tut, dname='value'
. H.Wenn Sie der Meinung sind, dass dies verwirrend ist, überprüfen Sie den Unterschied zwischen Kind und Nachkomme oder dem Stammknoten und dem Dokumentelement!
quelle
In Bezug auf MSDN ,
Value
Eigentum derXmlNodeType.Element
Rückgabe:quelle
node.InnerXml = null;
und dann testen, obnode.InnerXml == null;
er falsch ist. Stattdessennode.InnerXml == string.Empty;
ist wahr. Kann ich mich auf dieses Verhalten verlassen? MSDN-Dokumente schweigen dazu.Da das URL-Element der Blattknoten ist, enthält die InnerText-Eigenschaft (auch InnerXml) den Elementwert. Für Elementknoten ist die value-Eigenschaft null, wie in der msdn-Dokumentation https://msdn.microsoft.com/en-us/library/system.xml.xmlnode.value(v=VS.110).aspx gezeigt .
quelle