2
我需要一个XPath表达式来查找具有特定数字,类型和子级顺序的节点。例如。我们需要一个expr
有三个孩子的类型expr
,LEFT_ASSIGN
和expr
,顺序如下:XPath:第一个孩子,但只有在特定标记
//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>
谢谢,这些都很有帮助!顺便说一句。我想没有办法简单地告诉XPath只是在指定子节点时考虑子节点的顺序,而且需要编写'* [1] [self :: expr]'。 –