我有以下xml文件,我需要使用xpath来获取基于“linenumber”的“amount”值。
<Doc>
<Documents>
<Document1>
<linenumber>800</linenumber>
<amount>100.00</amount>
<name>fee1</name>
</Document1>
<Document2>
<linenumber>801</linenumber>
<amount>200.00</amount>
<name>fee2</name>
</Document2>
<Document3>
<linenumber>802</linenumber>
<amount>300.00</amount>
<name>fee3</name>
</Document3>
<Document4>
<linenumber>803</linenumber>
<amount>400.00</amount>
<name>fee4</name>
</Document4>
</Documents>
</Doc>
我尝试了下面函数'GetDocumentField'中指定的xpath,但函数调用GetDocumentField(801,“amount”)没有返回任何值。我不能使用LINQ,因为它基于.Net framework 2.0。任何人都可以建议如何编写此xpath查询?谢谢!
Private Function GetDocumentField(ByVal line As Integer, ByVal field As String) As String
Return GetValueFromXPath(String.Format("//linenumber[.='{0}']/parent::node()/{1}", line, field)))
End Function
Private Function GetValueFromXPath(ByVal xpath As String) As String
Dim node As XmlNode
node = InputXml.SelectSingleNode(xpath)
Return GetValueFromNode(node)
End Function
Private Function GetValueFromNode(ByVal node As XmlNode) As String
If node Is Nothing Then
Return String.Empty
End If
If node.InnerText Is Nothing Then
Return String.Empty
End If
Return node.InnerText
End Function
答案 0 :(得分:1)
使用此XPath表达式:
/*/*/*[linenumber = '801']/amount
但在此之前,请更正所提供的非格式良好的XML文档(您可能没有注意到加载InputXml
时存在解析异常)。更具体地说,所有amount
元素都没有结束标记。