simplexml_load_file() не получает содержимое узла

Я не могу получить содержимое узла XML и атрибуты одновременно с библиотекой SimpleXML:

У меня есть следующий XML, и я хочу получить content@name содержимое атрибута и узла:

<page id="id1">
    <content name="abc">def</content>
</page>

Метод simplexml_load_string()

print_r(simplexml_load_string('<page id="id1"><content name="abc">def</content></page>'));

выводит это:

SimpleXMLElement Object
(
   [@attributes] => Array
        (
            [id] => id1
        )

    [content] => def
)

Как вы можете видеть, содержание content узел присутствует, но атрибуты отсутствуют. Как я могу получить содержимое и атрибуты?

Спасибо!

3 ответа

Решение
$x = simplexml_load_string('<page id="id1"><content name="abc">def</content></page>');

Чтобы получить атрибуты узла:

$attributes = $x->content->attributes(); //where content is the name of the node 
$name = $attributes['name'];

Чтобы получить content содержимое узла:

$c = $x->content;

Интересно, что $c можно использовать как строку и как объект, т.е.

echo $c; //prints string
print_r($c) //prints it out as object

Атрибуты контента присутствуют. Это всего лишь уловка print_r() и того, как он работает с объектами XML в памяти.

$x = simplexml_load_string('<page id="id1"><content name="abc">def</content></page>');

print_r($x->content);
print_r($x->content['name']);
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [name] => abc
        )

    [0] => def
)

SimpleXMLElement Object
(
    [0] => abc
)

В simplexml доступ к элементам возвращает объекты SimpleXMLElement. Вы можете просмотреть содержимое этих объектов, используя var_dump.

$book=simplexml_load_string('<page id="id1"><content name="abc">def</content></page>');
$content=$book->content;
var_dump($content);

Вы можете получить доступ к этим объектам с помощью цикла foreach.

foreach($obj as $value) {
if (is_array($value)) {
    foreach ($value as $name=>$value) {
    print $name.": ".$value."\n";}       
                        }
                else print $value;
       }

Вы можете не только получать содержимое (например, элементы и атрибуты), но также добавлять и удалять их. Вы также можете использовать Xpath для навигации по значениям в сложном дереве XML. Вам просто нужно пройти через методы класса SimpleXMLElement здесь.

Другие вопросы по тегам