用于检索父级中的所有标记的Xpath

用于检索父级中的所有标记的Xpath,xpath,Xpath,使用xpath在父标记内查找特定标记: 样本输入: <Table> <Tbody> <Row> <cell><para> <ref> </ref> <ref> </ref> </para> </cell> </Row> <Row> &l

使用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参数,它应该返回0
  • 第2单元,它应该返回1
  • cell3参数,它应该返回0
  • 第4单元,它应该返回1
  • 第5单元,它应该返回2
  • 第6单元,它应该返回1
如何找出单元格内非ref标记的计数


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

XPath不能返回每个
para
元素的结果-这是在更高级的语言中应该做的事情XPath嵌入到其中(例如,XSLT、XQuery、Java、PHP、Python、Perl…)

要检索单个结果,请执行以下操作:

<cell><para> <ref> </ref> <ref> </ref> </para>  </cell>
在这种情况下,将产生

0


编辑:正如肖恩·B·杜金所指出的,这只适用于XPath 1.0。这在XPath2.0和3.0中是可能的,Xpath函数可以是axis步骤,并且序列总是被完全计算。有关XPath 2.0解决方案,请参阅

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

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)

感谢您的回答。您应该限定您的语句“XPath不能…”。版本2.0可以很容易做到。@SeanB.Durkin是的,你当然是对的。我马上编辑答案。
for $p in Table/Tbody/Row/cell return count($p//ref)