webentwicklung-frage-antwort-db.com.de

XmlNode-Wert vs. InnerText

Ich erstelle eine Ping-Anwendung für die Schule, deren XML voll mit URLs ist. Ich verlor eine Stunde, weil XmlNode.Value zu einer Null führte. 

Dann habe ich es in InnerText geändert und es hat gut funktioniert. 

Jetzt habe ich mich gefragt, was der Unterschied ist, da 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>
67
Tom Kerkhove

Wenn Ihr XML beispielsweise wie <Foo>Bar</Foo> aussieht, wird "Bar" tatsächlich als separater Knoten betrachtet: ein XmlText-Knoten (Unterklassifizierung aus XmlNode). Die Value-Eigenschaft dieses XmlText-Knotens wäre "Bar".

"Foo" wird als XmlElement betrachtet (auch von XmlNode Unterkategorie). XmlNode.Value gibt verschiedene Dinge zurück, basierend auf dem Knotentyp. Siehe diese Tabelle die zeigt, dass Value immer null für Element-Knoten zurückgibt. 

Die Variable InnerText des Foo-Knotens gibt "Bar" zurück, da er die Werte seiner untergeordneten Elemente verkettet (in diesem Fall nur der eine Knoten XmlText).

81
Robert Levy

Ich hatte eine ähnliche Situation. Was ich tat, ist, ich habe das erste Kind des aktuellen Knotens ausgewählt und geprüft, ob es XMLtext ist, 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");
    }
}
7
Santhosh Murali

Die XML-Spezifikation ist sehr wählerisch hinsichtlich der Terminologie und der Art des XML-Objekts. Wie bereits erwähnt, hat element keinen Wert. Dies ist spezifisch für attribute (und wahrscheinlich für einige andere Knotentypen), da attribute eine Syntax hat, die element nicht verwendet, d. H. name='value'

Wenn Sie denken, dass dies verwirrend ist, überprüfen Sie den Unterschied zwischen einem Kind und einem Nachkommen oder dem Stammknoten und dem Dokumentelement!

1
Tom W

In Bezug auf MSDN gibt die Value-Eigenschaft von XmlNodeType.Element Folgendes zurück:

null. Sie können die Eigenschaften XmlElement.InnerText oder XmlElement.InnerXml verwenden, um auf den Wert des Elementknotens zuzugreifen. 

0
abatishchev

Da das URL-Element der Blattknoten ist, enthält die InnerText-Eigenschaft (auch InnerXml) den Elementwert. Für Elementknoten ist die Werteigenschaft null, wie in der Msdn-Dokumentation https://msdn.Microsoft.com/en-us/library/system.xml.xmlnode.value(v=VS.110).aspx .

0