【问题标题】:simplexml_load_file() does not getting node contentsimplexml_load_file() 没有获取节点内容
【发布时间】:2015-06-30 05:34:45
【问题描述】:

我无法使用 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 节点的内容存在,但缺少属性。如何接收内容和属性?

谢谢!

【问题讨论】:

  • PHP 手册中详细介绍了如何使用 SimpleXML 访问元素和属性的示例:Basic SimpleXML usage - 您可能会发现它提供了丰富的信息

标签: php xml simplexml


【解决方案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
)

【讨论】:

  • 谢谢你,chugadie,这解释了虽然没有回答。我将在下面发布答案。
【解决方案2】:

在 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的方法即可。

【讨论】:

  • 谢谢,user3633267,这为主题带来了光明!
【解决方案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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-10-22
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
相关资源
最近更新 更多