繁体   English   中英

XmlNode值与InnerText

[英]XmlNode Value vs InnerText

我正在使用全URL的XML为学校创建一个ping应用程序。 我由于XmlNode.Value而损失了一个小时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根据XmlNode.Value在的节点类型返回不同的内容。 请参阅此表该表显示Value始终为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规范对术语以及什么构成XML对象类型非常挑剔。 如前所述, element没有值。 这是特定于attribute (可能还有其他几种节点类型),因为attribute具有element没有的语法,即name='value'

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

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

关于MSDNXmlNodeType.Element Value属性返回:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM