我无法使用SimpleXML库同时获取XML节点内容和属性:
我有以下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
节点的内容已存在,但缺少属性。我如何收到内容和属性?
谢谢!
答案 0 :(得分:1)
存在内容的属性。这只是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
)
答案 1 :(得分:1)
在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类here的方法。
答案 2 :(得分:1)
$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