SimpleXML显示意外行为

时间:2017-04-27 14:56:20

标签: php xml simplexml

我有一个名为conf.xml的XML文件,我试图通过一个简单的php脚本(放在同一目录中)显示这个XML文件的内容,如下所示:

conf.xml中

<?xml version="1.0" encoding="UTF-8"?>
<registration_info>
  <organization name="Home" />
</registration_info>

PHP脚本:

$data=simplexml_load_file("conf.xml");
$node=$data->registration_info;
$subnode=$node->organization;
echo (string) $subnode['name']; // Displays null string

我觉得代码没有错,但输出是意料之外的,因为预期的输出是&#34; Home&#34;。有谁能帮我解决这个问题并向我解释解决方案?

提前致谢。

2 个答案:

答案 0 :(得分:2)

这里给出的现有答案是正确的,但解释相当混乱。 SimpleXML不是隐藏 XML的根节点,只是您拥有的对象已经该节点。

每个SimpleXMLElement对象代表XML文档树中的特定节点。 SimpleXML中没有单独的对象表示&#34;整个文档&#34;,因此当您运行simplexml_load_file时,返回的对象是根节点的SimpleXMLElement

$root_node = simplexml_load_file("conf.xml");
echo $root_node->getName(); // registration_info

$child_node = $root_node->organization;
// Short for $root_node->organization[0];
// meaning "get the first child with name 'organization'
echo $child_node->getName(); // organization

答案 1 :(得分:1)

试试这个希望这会帮助你。您只需删除$node=$data->registration_info;

即可

Try this snippet here

<?php

ini_set('display_errors', 1);
$data=simplexml_load_file("conf.xml");
$subnode=$data->organization;
echo (string) $subnode['name'];

输出: print_r($data)

SimpleXMLElement Object
(
    [organization] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [name] => Home
                )

        )

)