XmlNode值vs InnerText
我正在用一个充满URL的XML创build一个学校的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>
例如,如果您的XML看起来像<Foo>Bar</Foo>
那么“Bar”实际上被认为是一个单独的节点:一个XmlText
节点(从XmlNode
分类)。 该XmlText
节点的Value
属性将是“Bar”。
“Foo”被认为是一个XmlElement
(也从XmlNode
子类)。 XmlNode.Value
根据节点的types返回不同的东西。 请参见下表 , 该表显示了Element
节点始终返回null
。
Foo节点的InnerText
返回“Bar”,因为它连接了子节点的值(在本例中只有一个XmlText
节点)。
我也有类似的情况。 我所做的是,我挑选了当前节点的第一个子节点,并检查它是否是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"); } }
XML规范对于术语以及什么types的XML对象是非常挑剔的。 如前所述, element
没有价值。 这是特定attribute
(可能是一些其他节点types),因为attribute
有一个语法, element
没有,即name='value'
。
如果您认为这很混乱,请查看子代和后代之间的区别,或根节点和文档元素!
关于MSDN , XmlNodeType.Element
Value
属性返回:
空值。 您可以使用XmlElement.InnerText或XmlElement.InnerXml属性来访问元素节点的值。