XML选择节点值

时间:2013-01-06 13:35:00

标签: c# xml xml-parsing

我有以下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无法正确填充?

5 个答案:

答案 0 :(得分:4)

.Valuenull for Element nodes

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

答案 1 :(得分:2)

默认情况下, 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;

应该为您提供正确的价值。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

VALUE是一个属性。

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

答案 4 :(得分:0)

您可以通过一个XPath选择实际执行此操作:

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