0

我有以下 XML:

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

并尝试VALUE像这样获取任一 mac/ip 元素的字符串:

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正确填充?

4

5 回答 5

4

.Valuenull用于Element节点。_

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

于 2013-01-06T13:38:46.973 回答
2

VALUE是一个属性。

string value = macnode.Attributes["VALUE"].Value
于 2013-01-06T13:40:19.027 回答
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;

应该为您提供正确的值。

于 2013-01-06T13:46:56.980 回答
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

于 2013-01-06T13:38:21.513 回答
0

您实际上可以通过一个 XPath 选择来完成这一切:

XmlNode macnode = xmlDoc.SelectSingleNode("/NET_SETTINGS/IP_ADDRESS/@VALUE");
string mac = macnode.Value;
于 2013-01-06T21:36:30.840 回答