我有一个XmlNode
对象rowNode
,当我致电rowNode.OuterXml
时,我得到了这个结果:
<Row Nr="1">
<Område FormulaR1C1="" />
<Position FormulaR1C1="" />
<Lev FormulaR1C1="" />
<Option FormulaR1C1="" />
</Row>
我正在尝试使用以下代码获取Område
的值:
rowNode.SelectSingleNode("/Row/Område").InnerText
我得到Referenced object has a value of 'Nothing'.
我猜,这没关系,因为它没有价值。但是接下来我在另一个转向的rowNode
对象中执行了这个操作,其中XML是:
<Row Nr="2">
<Område FormulaR1C1="1">1</Område>
<Position FormulaR1C1="1">1</Position>
<Lev FormulaR1C1="NM">NM</Lev>
<Option FormulaR1C1="" />
</Row>
我仍然得到Referenced object has a value of 'Nothing'.
我还尝试了其他一些元素 - Lev
和Position
,但我得到了相同的“Nothing”结果。我做错了什么?
答案 0 :(得分:1)
问题是由于存在默认命名空间。访问命名空间中元素的一种可能方法是使用XmlNamespaceManager
。您需要将前缀到名称空间uri的映射注册到命名空间管理器,然后在xpath中正确使用已注册的前缀:
Dim doc As New XmlDocument()
.....
Dim nsManager As New XmlNamespaceManager(doc.NameTable)
nsManager.AddNamespace("d", "your-namespace-uri-here")
Dim result = rowNode.SelectSingleNode("/d:Row/d:Område", nsManager).InnerText
或者,如果您在选择元素时不需要考虑名称空间,则可以使用xpath local-name()
函数忽略它:
Dim result = rowNode.SelectSingleNode("/*[local-name()='Row']/*[local-name()='Område']").InnerText