2009-07-20 7 views
0

xpath 및 배열에 대한 질문이 있습니다. 내가 궁금해 한 것은 xpath를 몇 가지 simpleXML에서 사용하고 노드 이름과 그 값의 연관 배열을 반환 할 수 있는지 여부였다. 가능과 유사한 배열을 얻을 수SimpleXML, 연관 배열 및 XPath

array(0 => 'blah' , 1 => 'blah blah'); 

: 다음은 다음과 같은 배열을 반환 $xml->xpath('//node()[@page="1"]');을 이동한다면 이제

<element1 page="1">blah</element1> 
<element2 page="1">blah blah</element2> 
<element3 page="2">blah</element3> 
<element4 page="3">blah blah</element4> 

예를 들어, 나는 다음과 같은 XML이 있다고 아래 하나?

array(element1 => 'blah' , element2 => 'blah blah'); 

감사합니다.

답변

1

그런 종류의 배열로 가져올 수는 없다고 생각합니다. (PHP에 태그, 하위 노드, 속성 등을 넣으려면 PHP에 알려줘야합니다), DOMXPath class을 사용하여 DOMNode 요소를 가져올 수 있습니다. 당신이 SimpleXML이 객체가 아니라 여전히 액세스 할 리터럴 문자열을 가지고 있기 때문에

$result = array(0 => simplexmlObject('blah') , 1 => simplexmlObject('blah blah')); 

: 당신이 더 같이있어 언급 한 바와 같이 배열이 정확하지 않다 간단한 XML의

$document = new DOMDocument(); 
$document->load($myXmlFile); 
$xpath = new DOMXPath($document); 

$result = $xpath->query('//node()[@page="1"]'); 
var_dump($result->length); // int(2) 
var_dump($result->item(0)->tagName); // string(8) "element1" 
var_dump($result->item(1)->tagName); // string(8) "element2" 
1

: 당신에게 DOMNodeList 객체를 제공합니다 전체 SimpleXML에 d ocument :

$result[0]->addChild("another", "child"); 

// which is <element1 page="1">blah<another>child</another></element1> 

또는 가까운 질문에

$name = $result[0]->getName(); 

당신은 다음과 같이 할 수있는 당신이 DOM 속성으로 할 수있는 모든 일에 반한 경우 :

$parent = dom_import_simplexml($result[0])->parent; 
+0

감사합니다 이것을 위해; 나는'$ result [0] -> getName()'을 사용하여 원하는 배열을 생성하기 위해 반복적으로 루프를 만들 것이다. – JMTyler