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
不能正确填充?
对于Element
节点,.Value
为null
。
你想要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
属性的值。您需要macnode
的Attributes
属性,然后从中获取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;