2009-07-20 7 views
0

Ich habe eine Frage zu Xpath und Arrays. Ich habe mich gefragt, ob es möglich ist, Xpath auf einigen SimpleXML zu verwenden und ein assoziatives Array von Knotennamen und deren Werte zurückgeben zu lassen. Zum Beispiel, sagen, dass ich die folgende XML habe:SimpleXML, assoziative Arrays und XPath

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

Nun, wenn ich $xml->xpath('//node()[@page="1"]'); gehen sollte, dann wäre es ein Array wie folgt zurück:

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

Ist es möglich, eine Anordnung ähnlich zu bekommen der eine unten?

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

Danke für die Hilfe!

Antwort

1

Ich denke nicht, dass Sie das in diese Art von Array holen können (Sie müssten PHP sagen, welche Tags, Kindknoten, Attribute, etc dort setzen), aber Sie können DOMNode-Elemente mit der DOMXPath class abrufen gibt Ihnen ein DOMNodeList Objekt:

$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

Für einfache XML das Array nicht genau ist, wie Sie es ist mehr wie erwähnt:

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

, weil Sie ein SimpleXML Objekt und nicht eine wörtliche Zeichenfolge, die Sie noch haben Zugriff haben in vollem Umfang SimpleXML d OKUMENT:

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

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

oder näher zu Ihrer Frage

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

und wenn Sie sind begeistert mit allen Dingen, die Sie mit DOM-Eigenschaften tun können, dann können Sie etwas tun:

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

Dank dafür; Ich würde lieber mit '$ result [0] -> getName()' eine Schleife erzeugen, um das gewünschte Array selbst zu erzeugen, als meine Abhängigkeiten zu refaktorieren, wie es sonst vorgeschlagen wird. – JMTyler