Я заметил, что при использовании SimpleXMLElement
в документе, который содержит эти теги CDATA, содержимое всегда NULL
. Как это исправить?
Также извините за спам об XML. Я уже несколько часов пытаюсь заставить работать скрипт на основе XML ...
<content><![CDATA[Hello, world!]]></content>
Я попробовал сделать первое попадание в Google, если вы искали "SimpleXMLElement cdata", но это не сработало.
Ответы:
Вероятно, вы неправильно обращаетесь к нему. Вы можете вывести его напрямую или преобразовать в строку. (в этом примере литье лишнее, так как echo все равно делает это автоматически)
Возможно, вам повезет больше с
LIBXML_NOCDATA
:источник
print_r
вы действительно не получаете к нему доступа правильно. Напишите код, который вам действительно нужен - возможно, с приведениемecho
или с(string)
приведением, и вы обнаружите, что с содержимым все в порядке. Не используйте LIBXML_NOCDATA, это не имеет значения.<anElement>a text node <aChildElement /> <![CDATA a cdata node]]> another text node</anElement>
. CDATA и текстовые узлы бывают разных типов, и SimpleXML отслеживает это, чтобы вы могли вернуть введенный XML. Когда вы сжимаете объект SimpleXML в массив, он отбрасывает много информации - узлы CDATA, комментарии, любой элемент, не в текущем пространстве имен (например<someNSPrefix:someElement />
) позиция дочернего элемента в тексте и т. д.LIBXML_NOCDATA
преобразует узлы CDATA в текстовые узлы, но не исправляет остальные.LIBXML_NOCDATA
Является необязательным третьим параметромsimplexml_load_file()
функции. Это возвращает объект XML со всеми данными CDATA, преобразованными в строки.Исправить CDATA в SimpleXML
источник
Это помогло мне:
источник
Это работает идеально для меня.
источник
Когда использовать
LIBXML_NOCDATA
?Добавляю проблему при преобразовании XML в JSON.
При доступе к объекту SimpleXMLElement он получает CDATA:
У меня есть смысл использовать,
LIBXML_NOCDATA
потому что уjson_encode
меня нет доступа к SimpleXMLElement для запуска функции приведения строк, я предполагаю__toString()
эквивалент.источник