XmlNode 值与 InnerText

我正在创建一个学校的 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>
67964 次浏览

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

“ Foo”被认为是一个 XmlElement(也从 XmlNode分类)。根据节点的类型,XmlNode.Value返回不同的值。请参阅 这张桌子,它显示 Value总是为 Element节点返回 null

Foo 节点的 InnerText返回“ Bar”,因为它连接其子节点的值(在本例中,只有一个 XmlText节点)。

关于 MSDNXmlNodeType.ElementValue属性返回:

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

XML 规范对术语和 XML 对象的类型非常挑剔。如前所述,element没有值。这是特定于 attribute(可能还有其他几种节点类型)的,因为 attributeelement没有的语法,即 name='value'

如果您认为这很令人困惑,那么可以查看子元素和子元素之间的区别,或者根节点和文档元素之间的区别!

我也遇到过类似的情况。我所做的是,选择当前节点的第一个子节点,检查它是否是 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");
}
}

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