XmlNode Value vs InnerText

时间:2011-10-24 14:46:18

标签: c# .net xml

我正在为学校创建一个ping应用程序,其中包含一个充满URL的XML。 由于XmlNode.Value导致空值,我丢失了一个小时。

然后我将其更改为InnerText并且工作正常。

现在我想知道有什么区别,因为MSDN说.Value返回节点的值,InnerText返回节点及其所有子节点的连接值。

有人可以帮我解释一下吗?

<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>

5 个答案:

答案 0 :(得分:82)

例如,如果您的XML看起来像<Foo>Bar</Foo>,则“Bar”实际上被视为一个单独的节点:XmlText节点(从XmlNode分类)。该Value节点的XmlText属性为“Bar”。

“Foo”被认为是XmlElement(也是XmlNode的子类)。 XmlNode.Value根据节点类型返回不同的内容。请参阅this table,其中Value始终为null个节点返回Element

Foo节点的InnerText返回“Bar”,因为它连接其子节点的值(在这种情况下,只有一个XmlText节点)。

答案 1 :(得分:7)

我有类似的情况。我做的是,我选择了当前节点的第一个子节点并检查它是否是XMLtext,然后显示其值。

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

答案 2 :(得分:1)

XML规范非常挑剔术语以及什么类型的XML对象。如上所述,element没有值。这特定于attribute(可能还有其他一些节点类型),因为attribute具有element没有的语法,即name='value'

如果您认为这令人困惑,请查看子和后代,或根节点和文档元素之间的区别!

答案 3 :(得分:0)

关于MSDNValue的{​​{1}}属性返回:

  

空。您可以使用XmlElement.InnerText或XmlElement.InnerXml属性来访问元素节点的值。

答案 4 :(得分:0)

由于url元素是叶节点,因此InnerText(也是InnerXml)属性包含元素值。对于元素节点,value属性将为null,如msdn文档https://msdn.microsoft.com/en-us/library/system.xml.xmlnode.value(v=VS.110).aspx中所示。