【问题标题】:XPath select node from correct levelXPath 从正确的级别选择节点
【发布时间】:2011-10-30 14:24:04
【问题描述】:

我有以下(简化的)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

根 ID 的正确选择器是什么?

【问题讨论】:

    标签: .net xml xpath


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你的问题在这里

      Element = Node.SelectSingleNode("/id") 
      

      您已指定应计算绝对表达式 /id

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

      解决方案:任一:

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

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

      .

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

      【讨论】:

      • 感谢您提供更详细的解释。我尝试了/idid,但都没有返回任何内容。也许我是从错误的节点开始的,或者其他同样愚蠢的事情——我看不出它失败的另一个原因。
      • @Basiclife:也许Node 定义不正确。也许是这样的:Dim Node = Navigator.SelectSingleNode(/*) ?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 2013-11-28
      相关资源
      最近更新 更多