XPath:第一个子项,但仅当特定标记
我需要一个XPath表达式来查找具有特定数量、类型和子节点顺序的节点。例如,我们需要一个XPath:第一个子项,但仅当特定标记,xpath,Xpath,我需要一个XPath表达式来查找具有特定数量、类型和子节点顺序的节点。例如,我们需要一个expr,它有三个子类型expr、LEFT\u ASSIGN和expr,顺序如下: //expr[count(child::*)=3] [*[1][name()='expr'] [*[2][name()='LEFT_ASSIGN'] [*[3][name()='expr'] 这是可行的,但编写起来相当麻烦,特别是因为我经常需要将相似的条件嵌入彼此。例如,我需要指定上面的第一个expr子级也有一组
expr
,它有三个子类型expr
、LEFT\u ASSIGN
和expr
,顺序如下:
//expr[count(child::*)=3]
[*[1][name()='expr']
[*[2][name()='LEFT_ASSIGN']
[*[3][name()='expr']
这是可行的,但编写起来相当麻烦,特别是因为我经常需要将相似的条件嵌入彼此。例如,我需要指定上面的第一个expr
子级也有一组特定的子级,等等:
//expr[count(child::*)=3]
[*[1][name()='expr'][count(child::*)=1][SYMBOL[count(child::*)=0]]]
[*[2][name()='LEFT_ASSIGN']]
[*[3][name()='expr']]
有没有一种更短更简单的方法
以下是一些示例数据:
<?xml version="1.0" encoding="UTF-8"standalone="yes" ?>
<exprlist>
<expr>
<expr>
<SYMBOL>X</SYMBOL>
</expr>
<LEFT_ASSIGN><-</LEFT_ASSIGN>
<expr>
<expr>
<NUM_CONST>42</NUM_CONST>
</expr>
<OP-STAR>*</OP-STAR>
<expr>
<NUM_CONST>42</NUM_CONST>
</expr>
</expr>
</expr>
<OP-SEMICOLON>;</OP-SEMICOLON>
<expr>
<expr>
<SYMBOL>Y</SYMBOL>
</expr>
<LEFT_ASSIGN><-</LEFT_ASSIGN>
<expr>
<NUM_CONST>42</NUM_CONST>
</expr>
</expr>
</exprlist>
X
-
42
*
42
;
Y
-
42
XPath中编写*[1][name()='expr']
的惯用方法是*[1][self::expr]
//expr[count(child::*)=3]
可以缩短为//expr[count(*)=3]
SYMBOL[count(child::*)=0]
通常写为SYMBOL[not(*)]
谢谢,这些都很有用!BTW.我想没有办法简单地告诉XPath只考虑子节点在指定时的顺序,并且需要编写<代码> *[1 ] [自我::EXPR] < /代码>。