我正在用一个充满URL的XML为学校创建一个ping应用程序。我浪费了一个小时,因为XmlNode.Value
导致了null。
然后我把它改成了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>
发布于 2011-10-24 23:04:32
例如,如果您的XML看起来像<Foo>Bar</Foo>
,那么"Bar“实际上被认为是一个单独的节点:一个XmlText
节点(从XmlNode
继承而来)。XmlText
节点Value
属性将是"Bar“。
"Foo“被认为是一个XmlElement
(也是XmlNode
的子类)。XmlNode.Value
根据节点的类型返回不同的内容。参见this table,它显示Value
总是为Element
节点返回null
。
Foo节点的InnerText
返回"Bar“,因为它连接了它的子节点的值(在本例中,只有一个XmlText
节点)。
发布于 2012-08-31 19:27:40
我也遇到过类似的情况。我所做的是,选择当前节点的第一个子节点,检查它是否为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");
}
}
发布于 2011-10-25 02:22:59
XML规范对术语和什么构成什么类型的XML对象非常挑剔。如前所述,element
没有值。这是特定于attribute
(可能还有其他几种节点类型)的,因为attribute
有一种element
没有的语法,即name='value'
。
如果您认为这很令人困惑,请查看子节点和后代之间的区别,或者根节点和文档元素之间的区别!
https://stackoverflow.com/questions/7877609
复制相似问题