SimpleXML, ilişkisel diziler ve XPath

2 Cevap php

Ben XPath ve diziler hakkında bir sorum var. Bazı SimpleXML üzerinde bir XPath kullanımı ve düğüm adları ve değerleri bir ilişkisel dizi döndürmek mümkün olup olmadığını ben oldu merak ediyordum. Örneğin, ben aşağıdaki XML söylüyorlar:

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

Ben gitmek olsaydı şimdi $xml->xpath('//node()[@page="1"]'); sonra aşağıdaki gibi bir dizi döndürür:

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

Aşağıda birine benzer bir dizi almak mümkün mü?

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

Yardımın için teşekkürler!

2 Cevap

Ben (çocuk düğümleri, oraya koymak vb, nitelikleri ne etiketleri, PHP söylemek gerekir) Eğer dizinin bu tür içine getirebilir sanmıyorum, ama DOMXPath class kullanarak DOMNode elemanları getirebilir hangi bir DOMNodeList nesne verir:

$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"

Eğer daha fazla gibi belirtildiği gibi basit XML dizisi tam değil:

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

Bir SimpleXML nesnesi değil, değişmez bir dize var çünkü hala tam SimpleXML belgeye erişimi vardır:

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

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

Sorunuza veya daha yakın

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

Eğer DOM özellikleri ile yapabileceğiniz her şeyi ile vurulmuş ise ve sonra gibi bir şey yapabilirsiniz:

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