XPath选择正确级别的节点

时间:2011-10-30 14:24:04

标签: .net xml xpath

我有以下(简化的)XML ...

<root type="object">
    <user type="object">
        <id type="number">123</id>
    </user>
    <id type="number">456</id>
</root>

我正在使用以下内容从根元素中获取Id

    Dim Navigator = Document.CreateNavigator()
    Dim ns = New XmlNamespaceManager(Navigator.NameTable)
    Dim nodes = Navigator.Select("/root", ns)
    Dim Node = nodes.Current
    Element = Node.SelectSingleNode("/id")
    Dim Id = Element.Value

在这种情况下,Element.Value包含用户ID

root id的正确选择器是什么?

2 个答案:

答案 0 :(得分:2)

为什么不直接选择root-id节点?

Navigator.Select("/root/id", ns)

答案 1 :(得分:1)

您的问题在这里

Element = Node.SelectSingleNode("/id") 

您已指定应评估绝对表达式/id

这是一个绝对 XPath表达式(以/开头),如果其名称为"id",则选择XML文档的顶部元素。在这种特定情况下,top元素的名称是"root"(不是"id"),因此XPath表达式不会选择任何内容。

解决方案:或者:

  1. 使用相对表达Element = Node.SelectSingleNode("id")

  2. 使用单个XPath表达式选择所需元素

  3.     Element = Navigator.SelectSingleNode("/root", ns)