У меня есть такой XML, в котором есть несколько узлов с макросами (например, {author}) —
<?xml version="1.0"?>
<catalog>
<book id="test">
<author>{author}</author>
<title>{title}</title>
<genre>{genre}</genre>
<price>{price}</price>
<publish_date>{publish_date}</publish_date>
<description>{desciption}</description>
</book>
</catalog>
Выполнение simple_xml_load_string()
на вышесказанном не возвращает узел каталога, даже если ошибка не отображается (используя libxml_use_internal_errors(true)
и перебирая libxml_get_errors()
). Я также проверил XML на http://xmlbeautifier.com/.
Вот вывод simple_xml_load_string()
из вышеперечисленных —
SimpleXMLElement Object
(
[book] => SimpleXMLElement Object
(
[author] => {author}
[title] => {title}
[genre] => {genre}
[price] => {price}
[publish_date] => {publish_date}
[description] => {desciption}
)
)
Узел каталога отсутствует.
Каждый документ XML имеет ровно один корневой элемент. Он охватывает все другие элементы и, следовательно, является единственным родительским элементом для всех остальных элементов. Элементы ROOT также называются элементами PARENT. Так что это не пропущенный 1 узел, это просто, как это работает. Если вы хотите имя корневого элемента, попробуйте это:
<?php
$xml = simplexml_load_string($str);
echo $xml->getName();
?>
Других решений пока нет …