2016-07-13 2 views
2

특정 숫자, 유형 및 하위 노드가있는 노드를 찾는 XPath 표현식이 필요합니다. 예 :XPath : 첫 번째 자식 (특정 태그 인 경우에만)

//expr[count(child::*)=3] 
    [*[1][name()='expr'] 
    [*[2][name()='LEFT_ASSIGN'] 
    [*[3][name()='expr'] 

이 작동하지만, 자주 서로에 유사한 조건을 포함 할 필요 특히 때문에, 쓸 매우 복잡 : 우리는이 순서로, 유형 expr, LEFT_ASSIGNexprexpr 세 아동이 필요합니다. 예 :

//expr[count(child::*)=3] 
    [*[1][name()='expr'][count(child::*)=1][SYMBOL[count(child::*)=0]]] 
    [*[2][name()='LEFT_ASSIGN']] 
    [*[3][name()='expr']] 

이 짧은, 간단한 방법이 있나요 : 나는 등, 또한 위의 첫 번째 expr 아이가 아이들의 특정 세트가 지정해야합니까? *[1][name()='expr']*[1][self::expr]입니다 쓰기의 XPath에서

<?xml version="1.0" encoding="UTF-8"standalone="yes" ?> 
<exprlist> 
    <expr> 
    <expr> 
     <SYMBOL>X</SYMBOL> 
    </expr> 
    <LEFT_ASSIGN>&lt;-</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>&lt;-</LEFT_ASSIGN> 
    <expr> 
     <NUM_CONST>42</NUM_CONST> 
    </expr> 
    </expr> 
</exprlist> 

답변

2

숙어 방법 : 여기

는 일부 샘플 데이터입니다.

//expr[count(child::*)=3]//expr[count(*)=3]으로 줄일 수 있습니다.

SYMBOL[count(child::*)=0]은 일반적으로 SYMBOL[not(*)]으로 기록됩니다.

+0

감사합니다. 다음은 유용합니다! Btw. XPath가 단지 지정된대로 자식 노드의 순서를 고려하도록하고,'* [1] [self :: expr]'을 써야한다고 말할 방법이 없다고 가정합니다. –

관련 문제