73 votes

XmlNode Value vs InnerText

Je suis en train de créer une application ping pour l'école avec un XML rempli d'URLs. J'ai perdu une heure à cause de XmlNode.Value aboutissait à un résultat nul.

Puis je l'ai changé en InnerText et ça a bien marché.

Je me demandais alors quelle était la différence, car MSDN indique que .Value renvoie la valeur du nœud et que InnerText renvoie les valeurs concaténées du noeud et de tous ses noeuds enfants.

Quelqu'un peut-il m'expliquer cela ?

<sites>
<site>
    <url>www.test.be</url>
    <email>test@test.be</email>
</site>
<site>
    <url>www.temp.be</url>
    <email>temp@temp.be</email>
</site>
<site>
    <url>www.lorim.ipsum</url>
    <email>interim.address@domain.com</email>
</site></sites>

89voto

Robert Levy Points 18154

Si, par exemple, votre XML ressemble à <Foo>Bar</Foo> alors "Bar" est en fait considéré comme un nœud séparé : un XmlText (sous-classe de XmlNode ). Le site Value de cette XmlText Le nœud serait "Bar".

"Foo" est considéré comme un XmlElement (également sous-classé à partir de XmlNode ). XmlNode.Value renvoie des choses différentes en fonction du type de nœud dont il s'agit. Voir ce tableau qui montre que Value retourne toujours null pour Element des nœuds.

Le site InnerText du nœud Foo renvoie "Bar" parce qu'il concatène les valeurs de ses enfants (dans ce cas, seul le nœud XmlText nœud).

7voto

Santhosh Murali Points 11

J'ai eu une situation similaire. Ce que j'ai fait, c'est que j'ai choisi le premier enfant du nœud actuel et j'ai vérifié s'il s'agit de XMLtext, puis j'ai affiché sa valeur.

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");
    }
}

1voto

Tom W Points 1801

La spécification XML est très pointilleuse sur la terminologie et sur ce qui constitue tel ou tel type d'objet XML. Comme mentionné, element n'a pas de valeur. Ceci est spécifique à attribute (et probablement quelques autres types de nœuds) car attribute a une syntaxe qui element ne le fait pas, c'est-à-dire name='value' .

Si vous pensez que c'est confus, vérifiez la différence entre enfant et descendant, ou le nœud racine et l'élément de document !

0voto

Girish Reddyvari Points 161

Comme l'élément url est le noeud feuille, la propriété InnerText(aussi InnerXml) contient la valeur de l'élément. Pour les nœuds d'éléments, la propriété value sera nulle, comme indiqué dans la documentation msdn. https://msdn.microsoft.com/en-us/library/system.xml.xmlnode.value(v=VS.110).aspx .

0voto

abatishchev Points 42425

En ce qui concerne MSDN , Value propriété de XmlNodeType.Element retours :

null. Vous pouvez utiliser les propriétés XmlElement.InnerText ou XmlElement.InnerXml pour accéder à la valeur du nœud de l'élément.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X