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