【问题标题】:Get node parent of defined type using xpath使用 xpath 获取定义类型的节点父节点
【发布时间】:2010-03-15 14:03:37
【问题描述】:

我将举一个我遇到的问题的例子。我的XML是这样的

<root>
  <child Name = "child1">
  <node>
  <element1>Value1</element1>
  <element2>Value2</element2>
  </node>
  </child>
  <child Name = "child2">
  <element1>Value1</element1>
  <element2>Value2</element2>
  <element3>Value3</element3>
  </child>
</root>

我有返回所有“element2”节点的 xpath 表达式。然后我想为每个“element2”类型的节点找到包含它的“child”类型的节点。问题是这两个节点之间可以有 1 到 n 个不同的节点,所以我不能只使用“..”。有没有类似“//”的东西会向上而不是向下看

我有一些 xpath 的基本知识,根据http://www.w3schools.com/xpath/xpath_syntax.asp"..' 返回当前节点父级问题是当前节点是"element2",问题是 xml 是动态的,来自第三方库所以我可以有这样的xml

<child Name = "child1">
  <node>
  <element1>Value1</element1>
  </node>
</child>

或者像这样

<child Name = "child1">
  <node1>
   <node2>
    <node3>
     <element1>Value1</element1>
     <element2>Value2</element2>
    </node3>
   </node2>
  </node1>
</child>

“元素”和子节点之间可以有 3 个以上的节点,节点的数量从 1 到 20 不等。请给我一个示例,仅使用一个 xpath 查询来获取“子”节点在两种情况下都使用“ ..”

最好的问候,
约旦

【问题讨论】:

  • 使用缩写..相当于使用parent::轴。您不能使用.. 的说法是完全错误的。请用例子验证你的陈述,这样你就会大大减少用虚假和误导性陈述提出的问题的数量。学习一点 XPath 也没什么坏处。
  • 嗨,它写在我的问题中。在“element2”和“child”之间,有 1 到 n 个其他节点的云,所以我不知道我需要使用谁多次使用“..”来到达“child”
  • @Dimitre Novatchev 我已经编辑了我的问题

标签: c# xml xpath


【解决方案1】:

祖先 xpath 轴是您正在寻找的:

element2/ancestor::child

祖先轴返回所有包含上下文元素的元素,向上。

【讨论】:

    【解决方案2】:

    所以你当前的上下文是element2 元素?使用parentaxis

    parent::child/@Name
    

    这将获取当前元素的父元素,名为child,并获取其属性Name

    如果您不在element2 的上下文中,并且您想查找所有带有element2 子级的child 元素,则需要这个代替:

    child[element2]
    

    【讨论】:

    • @IordanTanev:顺便说一句,parent::* 的快捷方式是..,所以../@Name 也可以完美运行。
    【解决方案3】:

    使用 .. 运算符。

    【讨论】:

      猜你喜欢
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      相关资源
      最近更新 更多