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]'。 –