2010-03-18 3 views
0

요소에 대한 id 속성 값이 있습니다.xpath 선택에 대한 도움말

나는 모든 하위 항목을 선택하지 않고 하위 항목 만 선택하려고합니다.

은 내가
$childElements = $xml->xpath('//entity[@id=212323]'); 
print_r($childElements); 

을 사용하지만 그 모든 자손을 선택하고 그들을 밖으로 인쇄 할 것이다. 나는 단지 1 세대 아이들을 선택하고 싶다. 내가 어떻게 할 수 있니?

<entity id=212323> 
    <this>asd</this> 
    <this>asd</this> 
    <this>asd</this> 
    <this> 
     <notThis>asd</notThis> 
     <notThis>asd</notThis> 
     <notThis>asd</notThis> 
    </this> 
</entity> 

(불필요한 데이터를 가져올 수 있도록 과정을 느리게하는 모든 자손을 fecthing, 그 똑똑하지, 계층 구조가 매우 긴 원인).

+1

어둠 속에서 찌르는 소리가 나지만 올바른 방향으로 나아갈 수 있습니다 : // entity [@ id = 212323]/child :: */text()'/ 또는 entity [@ id = 212323]/child :: */child :: text()' –

+0

아니요. 여전히 id 요소 아래의 모든 요소를 ​​가져 왔습니다. –

+2

나는 당신이 오해하고 있다고 생각합니다. 요소를 인쇄 할 때 요소와 모든 자식 요소를 인쇄합니다. 최상위 레벨 하위 항목 만 선택해도 인쇄하면 ... 모든 것을 인쇄합니다. 요구 사항을 재고해야합니다. – Cheeso

답변

4

이를 사용할 수 있습니다

//entity[@id=212323]/child::*[not(boolean(child::*))] 

자녀가없는 노드 만 선택할 수 있습니다. 이것이 충분하지 않고 다음과 같은 경우도 기대된다면 :

<entity id=212323> 
    <this>asd</this> 
    <this>asd</this> 
    <this>asd</this> 
    <this> 
     text node 1 
     <notThis>asd</notThis> 
     <notThis>asd</notThis> 
     <notThis>asd</notThis> 
     text node 2 
    </this> 
</entity> 

더 많은 연구를해야합니다. 이 예에서 text node 1text node 2<this> 요소의 하위로 간주됩니다. xPath 표현식에서이 두 노드를 다른 노드 (예 : <notThis>asd</notThis>)와 어떻게 다르게하는지 알아야합니다 (가능한지 확실하지 않습니다).