XML选择节点值

本文关键字:节点 选择 XML | 更新日期: 2023-09-27 17:50:46

我有以下XML:

<NET_SETTINGS>
   <MAC_ADDRESS VALUE="bb:cc:dd:ee:ff:aa"/>
   <IP_ADDRESS VALUE="10.1.1.1"/>
</NET_SETTINGS>

并尝试获取mac/ip元素的字符串VALUE,如下所示:

XmlNode macnode = xmlDoc.SelectSingleNode("/NET_SETTINGS/IP_ADDRESS");
string mac = macnode.Value;

我可以看到它在步进代码时选择了正确的节点,但是macnode.Value总是为空,OuterXml是这样的:

"<MAC_ADDRESS VALUE='"bb:cc:dd:ee:ff:aa'" />"

为什么Value不能正确填充?

XML选择节点值

对于Element节点,.Valuenull

你想要macnode.Attributes.GetNamedItem("VALUE").Value

VALUE是一个属性

string value = macnode.Attributes["VALUE"].Value

默认情况下,Value属性将返回XML元素的内部,在这种情况下不存在…

<MAC_ADDRESS VALUE="bb:cc:dd:ee:ff:aa"/>
is equivalent to . . .
<MAC_ADDRESS VALUE="bb:cc:dd:ee:ff:aa"></MAC_ADDRESS>

OuterXML将返回整个元素标记。这就是为什么你得到了整个元素。

既然你把它作为一个属性存储那么你必须把它作为一个属性来引用

XmlNode macnode = xmlDoc.SelectSingleNode("/NET_SETTINGS/IP_ADDRESS");
string mac = macnode.Attributes.GetNamedItem("VALUE").Value;

应该能得到正确的值

macnode.Value是文本值,而不是VALUE属性的值。您需要macnodeAttributes属性,然后从中获取VALUE属性的属性值。参见http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.attributes.aspx和http://msdn.microsoft.com/en-us/library/system.xml.xmlattributecollection.aspx

实际上您可以使用一个XPath选择来完成所有这些:

XmlNode macnode = xmlDoc.SelectSingleNode("/NET_SETTINGS/IP_ADDRESS/@VALUE");
string mac = macnode.Value;