Я не могу получить содержимое узла 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
узел присутствует, но атрибуты отсутствуют. Как я могу получить содержимое и атрибуты?
Спасибо!
Атрибуты контента присутствуют. Это всего лишь уловка 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 Вот.
$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