【问题标题】:Xpath for retrieving all the tags inside parentXpath 用于检索父级中的所有标签
【发布时间】:2015-01-30 06:31:31
【问题描述】:

使用 xpath 在父标签内查找特定标签:

示例输入:

<Table>
    <Tbody>
        <Row> 
            <cell><para> <ref> </ref> <ref> </ref> </para>  </cell>
        </Row>
        <Row>
            <cell><para>  <a1> </a1><ref> </ref> </para>  </cell>
        </Row>
        <Row>
            <cell><para>  <ref> </ref></para>  </cell>
        </Row>
        <Row>
            <cell><para>  <b1> </b1></para>  </cell>
        </Row>
        <Row>
            <cell><para>  <b1> </b1> <c1> </c1></para>  </cell>
        </Row>
        <Row>
            <cell><para>  <ref> </ref> <c1> </c1></para>  </cell>
        </Row>
    <Thead>

预期输出:

  • cell1-para 它应该返回 0
  • cell2-para 它应该返回 1
  • cell3-para 它应该返回 0
  • cell4-para 它应该返回 1
  • cell5-para 它应该返回 2
  • cell6-para 它应该返回 1

如何找出单元格内非 ref 标签的计数?

一个段落中可能有多个标签。名字可以是任何东西。但我们只需要单独检查 ref。

【问题讨论】:

    标签: xpath


    【解决方案1】:

    XPath 不能为每个 para 元素返回结果 - 这是您应该在 XPath 嵌入的高级语言中执行的操作(例如,XSLT、XQuery、Java、PHP、Python、Perl... )。

    要检索单个结果,对于像这样的输入

    <cell><para> <ref> </ref> <ref> </ref> </para>  </cell>
    

    使用以下 XPath 表达式

    count(//para/*[not(self::ref)])
    

    在这种情况下会产生

    0
    

    编辑:正如 Sean B. Durkin 所指出的,这仅适用于 XPath 1.0。在 Xpath 2.0 和 3.0 中是可能的,其中 XPath 函数可以是轴步骤,并且序列总是被完全评估。有关 XPath 2.0 解决方案,请参阅 Sean's answer

    【讨论】:

    • 感谢您的回答。
    • 您应该限定您的语句“XPath is not able to ...”。 2.0 版可以很容易地做到这一点。
    • @SeanB.Durkin 是的,你当然是对的。我稍后会编辑答案。
    【解决方案2】:

    如果你使用的是 XPath 2.0 或 3.0,并且焦点节点是 Table 的父节点,那么下面的表达式...

    Table/Tbody/Row/cell/para/count(decendant::ref)
    

    ...当应用于给定的示例输入文档时,将评估为这个 xs:integer... 的序列

    (0,1,0,1,2,1)
    

    只是为了好玩,这里有一个等效的替代表达......

    for $p in Table/Tbody/Row/cell return count($p//ref)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多