2009-07-20 29 views
0

xpathと配列について質問があります。いくつかのsimpleXMLでxpathを使用し、ノード名とその値の連想配列を返すことができるかどうか疑問に思っていました。それは可能ですに似た配列を取得するために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にタグ、子ノード、属性などを指定する必要があります)が、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 ]で文書:

$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