2010-12-30 6 views
2

dieses XML/XHTML-Schnipsel Gegeben:SimpleXML in PHP; Ersetzen Knoten mit Textknoten

<h1> 
    <zuq:data name="siteHeader" /> 
</h1> 

<h2> 
    <zuq:data name="pageHeaderName" /> 
    <span>&mdash;</span> 
    <zuq:data name="pageHeaderTitle" /> 
</h2> 

I SimpleXML XPath-Methode verwendet haben alle Top-Level-Knoten im zuq Namespace aufrunden. Da die Array-Elemente der xpath()-Methode Pseudoreferenzen zu den Objektbaumknoten SimpleXML sind, dachte ich, dass eine Manipulation einfach wäre. Ich kann jedoch nicht herausfinden, wie man einen gegebenen Elementknoten durch einen Textknoten ersetzt. Wie könnte ich zum Beispiel <zuq:data name="siteHeader" /> durch den Text My Site Header ersetzen.

Ich habe in Betracht gezogen, einfach den Elternknoten anzusteuern und seinen Inhalt zu modifizieren, wie es mit dem ersten Block funktionieren könnte (<h1>), aber ich sehe nicht, dass der Fall meines zweiten Blocks funktioniert (<h2>).

Gibt es eine einfache Möglichkeit, einen bestimmten Elementknoten durch einen SimpleXML in PHP durch einen Textknoten zu ersetzen?

Antwort

1

Soweit ich weiß, ist Simplexml nicht in der Lage, Knoten zu entfernen oder zu ersetzen. Es ist mehr für das Lesen, Erstellen und Nicht-Struktur-bezogene Änderungen. Sie müssen ein DOM-XML-Objekt verwenden, um Knoten vollständig zu ersetzen. Es ist eine Art komplexere Version von simplexx. Lesen Sie dazu hier:

http://www.php.net/manual/en/book.domxml.php

+0

In Ordnung, danke dqhendricks. Laut PHP-Dokumenten scheint DOM XML ab 5.0.0 aus dem PHP-Kern entfernt worden zu sein und in den PECL verschoben worden zu sein. Die anderen DOM-Klassen sollten umfassender sein, nein? – Dan

+0

es scheint, dass Sie Recht haben. in diesem Fall, Verweis: http://www.php.net/manual/en/book.dom.php – dqhendricks

+0

Danke nochmal ** dqhendricks **; DOM scheint die notwendige Funktionalität zu bieten, allerdings mit viel mehr lexikalischem Overhead. – Dan

1

Schnell in die Dokumentation schauen Ich konnte auch keinen einfachen Weg finden. Ich würde versuchen, einfach über das ursprüngliche XML-Dokument zu iterieren und jedes Element in ein neues XML-Dokument zu kopieren und sie nach Bedarf zu ändern.

+0

Hmm, das ist sicherlich umständlich erweisen. Da ich nicht eine ganze Menge Logik geschrieben habe, die die Verwendung von 'SimpleXML' umgibt, wäre es ratsam, andere Optionen für die PHP-XML-Dokumentdurchquerung/-manipulation zu untersuchen? – Dan

+0

Vielleicht möchten Sie in xsl-Transformationen nachsehen, es ist wirklich mächtig und Ihr XPath-Zeug passt genau dort hinein: http://php.net/manual/en/book.xsl.php –

+0

Danke ** Abdullah Jibaly **; XSLT ist wahrscheinlich etwas, das ich für einen anderen Aspekt des Projekts brauche, aber es scheint, dass DOM zu dem Fall passt. Es bietet einfach mehr programmatische Funktionen, die ich benötige. – Dan