【问题标题】:XPath: select node based on other node's valueXPath:根据其他节点的值选择节点
【发布时间】:2014-11-26 14:30:48
【问题描述】:

假设我有一个项目列表,每个项目都有自己的<id> 元素。还有一个<primaryId> 元素(在提到的列表之外)指定这些项目中的哪一项是“主要的”。如何选择“主要”项目的<value> 元素?是否可以在 .Net 中使用 XPath?

以下示例中的结果应该是<value>val2</value>

<root>
  <primaryId>2</primaryId>
  <items>
    <item>
      <id>1</id>
      <value>val1</value>
    </item>
    <item>
      <id>2</id>
      <value>val2</value>
    </item>
  </items>
</root>

【问题讨论】:

    标签: .net xml xpath


    【解决方案1】:

    XPath 中的位置路径可以包含[] 中的条件。

    所以先选择primary id节点:

    /root/primaryId
    

    使其成为条件,将其与条件上下文中的 id 元素进行比较:

    [id=/root/primaryId]
    

    用它来过滤item节点:

    /root/items/item[id=/root/primaryId]
    

    以及完整的表达方式:

    /root/items/item[id=/root/primaryId]/value
    

    【讨论】:

      【解决方案2】:
      <xsl:value-of select="/root/items/item[id=/root/primaryId]/value"/>
      

      【讨论】:

      • 一般来说,对您的建议或您所做的更改的描述会大大改善答案。
      • 如果询问 2x2 的结果,除了 4 之外的其他答案是什么?这是一个关于 xpath 的简单问题,而 xpath(在 xslt 内部)就是一个答案。这再简单不过了。
      • 见上面 ThW 的回答。
      • 你的意思是每个关于 xpath 的问题的答案都应该包含有关 xpath 基础的信息吗?
      • Stackoverflow 的想法是,这些问题比仅仅回答提问者的直接问题有更广泛的用途。人们使用搜索引擎提出问题并最终出现在这里。对我来说,@ThW 的答案的价值对于那些在知识有限的情况下寻找答案的人来说要大得多。一般来说,如果你是正确的并且包含很多细节,你可能会发现你的答案在 SO 上更受欢迎。
      猜你喜欢
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多