Mir ist aufgefallen, dass bei der Verwendung SimpleXMLElement
eines Dokuments, das diese CDATA-Tags enthält, der Inhalt immer vorhanden ist NULL
. Wie behebe ich das?
Entschuldigen Sie auch das Spammen über XML hier. Ich habe seit einigen Stunden versucht, ein XML-basiertes Skript zum Laufen zu bringen ...
<content><![CDATA[Hello, world!]]></content>
Ich habe den ersten Treffer bei Google versucht, wenn Sie nach "SimpleXMLElement-CDs" suchen, aber das hat nicht funktioniert.
Antworten:
Sie greifen wahrscheinlich nicht richtig darauf zu. Sie können es direkt ausgeben oder als Zeichenfolge umwandeln. (In diesem Beispiel ist das Casting überflüssig, da Echo es sowieso automatisch macht.)
Sie könnten besseres Glück haben mit
LIBXML_NOCDATA
:quelle
print_r
greifen Sie tatsächlich nicht richtig darauf zu. Schreiben Sie den Code, den Sie tatsächlich wollen - wahrscheinlich mitecho
oder mit einer(string)
Besetzung, und Sie werden feststellen, dass der Inhalt in Ordnung ist. Verwenden Sie nicht LIBXML_NOCDATA, es ist irrelevant.<anElement>a text node <aChildElement /> <![CDATA a cdata node]]> another text node</anElement>
. Die CDATA- und Textknoten sind unterschiedliche Typen, und SimpleXML verfolgt dies, damit Sie das eingegebene XML zurückerhalten können. Wenn Sie ein SimpleXML-Objekt in ein Array drücken, werden viele Informationen weggeworfen - CDATA-Knoten, Kommentare, jedes Element nicht Im aktuellen Namespace (z. B.<someNSPrefix:someElement />
)LIBXML_NOCDATA
konvertiert die Position des untergeordneten Elements im Text usw. CDATA-Knoten in Textknoten, behebt den Rest jedoch nicht.Dies
LIBXML_NOCDATA
ist ein optionaler drittersimplexml_load_file()
Funktionsparameter. Dies gibt das XML-Objekt mit allen in Zeichenfolgen konvertierten CDATA-Daten zurück.Korrigieren Sie CDATA in SimpleXML
quelle
Das hat den Trick für mich getan:
quelle
Das funktioniert perfekt für mich.
quelle
Wann verwenden
LIBXML_NOCDATA
?Ich füge das Problem hinzu, wenn XML in JSON umgewandelt wird.
Beim Zugriff auf das SimpleXMLElement-Objekt erhält es die CDATA:
Ich mache Sinn,
LIBXML_NOCDATA
weiljson_encode
ich nicht auf das SimpleXMLElement zugreife, um die String-Casting-Funktion auszulösen. Ich vermute ein__toString()
Äquivalent.quelle