2012-09-13 3 views
2

XML :php에서 다음 형제 xpath 쿼리를 사용하는 방법?

<Routes> 
    <Route type="source" > 
    <Table> 
    <Tablename>incoming</Tablename> 
    <Fields> 
     <Fieldsname ref="dest">truegoto</Fieldsname> 
    </Fields> 
    </Table> 
    </Route> 
</Routes> 

PHP는 :

$doc = new SimpleXMLElement('routingConfig.xml', null, true); 
$foo = $doc->xpath('/Routes/Route[@type="source"]/Table/Tablename[incoming]/following-sibling::Fields/Fieldsname[@ref="dest"]'); 
print_r($foo); 

<Tablename>incoming</Tablename>를 알 수있는 방법으로 truegoto을 시도. 현재 코드는 빈 배열을 반환합니다./

답변

1

following-sibling 부분에는 문제가 없습니다. 이 시점까지 이미 선택된 노드가 없습니다. Tablename[incoming]은 "incoming"이라는 하위 요소가있는 요소 인 "Tablename"을 의미합니다. 여기,

/Routes/Route[@type="source"]/Table/Tablename[.="incoming"]/following-sibling::Fields/Fieldsname[@ref="dest"] 
+0

수동 또는 참조 당신은 요소의 내용을 테스트하는 대신 Tablename[.="incoming"] 필요 ? 전에 그 구문을 본 적이 없어요. 이제 그것에 대해 생각해 보니/Table [Tablename = "incoming"] ... 역시 작동해야합니다. – Jared

+0

@Jared'.'는 "현재 항목"을 의미합니다. [이 MSDN 문서] (http://msdn.microsoft.com/en-us/library/ms256086.aspx)에서 예제를 볼 수 있습니다. 네, 대안이 잘 작동해야합니다. – lonesomeday

1

내가 @의 lonesomeday의 답변을 받아 들일 겁니다하지만 아마도 더 쉽게 대체 읽는 것입니다 : 그에

$foo = $doc->xpath('/Routes/Route[@type="source"]/Table[Tablename="incoming"]/Fields/Fieldsname[@ref="dest"]'); 
관련 문제