C# XmlNode值与InnerText

C# XmlNode值与InnerText,c#,.net,xml,C#,.net,Xml,我正在为学校创建一个ping应用程序,其中包含一个充满URL的XML。 由于XmlNode,我损失了一个小时。Value导致空值 然后我把它改成了InnerText,效果很好 现在我想知道有什么区别,因为MSDN这么说。Value返回节点的值,InnerText返回节点及其所有子节点的连接值 有人能给我解释一下吗 <sites> <site> <url>www.test.be</url> <email>test@test

我正在为学校创建一个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>

www.test.be
test@test.be
www.temp.be
temp@temp.be
www.lorim.ipsum
临时的address@domain.com

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

“Foo”被认为是
XmlElement
(也从
XmlNode
中细分)
XmlNode.Value
根据节点的类型返回不同的内容。请参见显示
元素
节点的
值总是返回
null

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

关于
XmlNodeType.Element的
Value
属性,返回:

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


XML规范对术语以及什么构成什么类型的XML对象非常挑剔。如前所述,
元素
没有值。这是特定于
属性
(可能还有一些其他节点类型),因为
属性
有一个
元素
没有的语法,即
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属性将为空,如msdn文档中所示。

您可能需要发布XML文件的示例。@Frazelthomas,-.value和.InnerText之间的差异可以很容易理解,而无需查看他的XML。如果您调试并使用立即窗口,您可能可以节省大量调试时间。它允许您基于当前上下文执行代码,并将写出XElement的所有属性及其值。这种方法允许您轻松浏览对象图并验证值是否为null,但InnerText包含您的值。希望这有帮助。InnerXml是否可以返回null?从我的简短测试来看,情况并非如此,例如,当我创建一个节点时,显式地分配
node.InnerXml=nullnode.InnerXml==null它是假的。相反,
node.InnerXml==string.Empty是真的。这是我可以信赖的行为吗?MSDN文档对此没有说明。注意:选择TextNode的xpath应该是“Foo/text()”嗨,Robert!如何将序列化与此一起使用?如果我以您的Bar为例,我将有一个名为“Foo”的类,但我应该在其中序列化哪个属性?还有更多理由放弃XML而使用JSON。