2013-01-12 4 views
-3

가능한 중복 :
A simple program to CRUD node and node values of xml file
XPath and PHP: nothing works properly액세스 요소

$XML = <<<XML 
<items> 
    <item id="123"> 
     <name>Item 1</name> 
    </item> 
    <item id="456"> 
     <name>Item 2</name> 
    </item> 
    <item id="789"> 
     <name>Item 3</name> 
    </item> 
</items> 
XML; 

$objSimpleXML = new SimpleXMLElement($XML); 

echo $objSimpleXML->item[2]->name; // output: Item 3 (OK) 
echo '<br><pre>'; 
print_r($objSimpleXML->xpath('./item[1]/name')); // output: empty Array!!! 

안녕하세요! 순수 xpath 쿼리를 사용하여 "항목 3"을 출력으로 얻는 방법? (내 제안은 빈 배열을 출력합니다.)

+2

이 내용은 http://stackoverflow.com/questions/14280450/xpath-and-php-nothing-works-properly/14280528#14280528과 유사합니다. –

답변

1

이것은 xpath 컬렉션 인덱스가 1- 기반에 가장 익숙한 0 기반 배열에 반대하기 때문입니다.

순수한 xpath 쿼리를 사용하여 Item 3을 얻으려면 xpath function returns array으로 가능하지 않습니다. 결과를 먼저 저장하고 배열 인덱스를 사용하여 요소에 액세스해야합니다. W3C의 XPATH 1.0 spec에서

$item = $objSimpleXML->xpath('./item[3]/name'); 
$str = $item[0]; 

는, 이것들은 predicate

축이 정방향 축 또는 역방향 축 중 하나입니다라고합니다. 문맥 노드 만 포함하는 축 또는 문서 순서에서 문맥 노드 뒤의 노드는 정방향 축입니다. 문서 순서로 문맥 노드 앞에있는 문맥 노드 만 포함하는 축은 역 축입니다. 따라서 조상, 선조 또는 자치, 선행 및 형제 축은 반대 축입니다. 다른 모든 축은 전진 축입니다. 자체 축은 항상 최대 하나의 노드 만 포함하므로 앞으로 또는 뒤로 축이든 상관 없습니다. 축에 대한 노드 집합 구성원의 근접 위치는 축이 전진 축인 경우 문서 순서로 정렬 된 노드 집합의 노드 위치로 정의되고 축이 앞으로 축인 경우 축 반대 축입니다. 첫 번째 위치는 1입니다.