获得单节点产生的价值“...没有价值”

时间:2015-05-21 10:20:43

标签: xml vb.net xmldocument

我有一个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'.我还尝试了其他一些元素 - LevPosition,但我得到了相同的“Nothing”结果。我做错了什么?

1 个答案:

答案 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