不明白XML中的实体和PHP的SimpleXMLElement输出(Don't unders

2019-08-31 14:36发布

我在使用XML实体,我不知道我的结果。

我有一个XML文件至极调用外部实体,这是config.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE config [
    <!ENTITY totalInstances SYSTEM "totalInstances.xml">
]>
<config>
    &totalInstances;
</config>

下面是该文件totalInstances.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<totalInstances>
    <nombre>45</nombre>
</totalInstances>

因此,在PHP我加载使用类的SimpleXMLElement的帮助下config.xml文件:

$config = simplexml_load_file('config.xml');

然后我输出变量$配置具有的var_dump,这里是我不明白的事情:

object(SimpleXMLElement)[3]
  public 'totalInstances' => 
    object(SimpleXMLElement)[5]
      public 'totalInstances' => 
        object(SimpleXMLElement)[6]
          public 'totalInstances' => 
            object(SimpleXMLElement)[8]
              public 'nombre' => string '45' (length=2)

我希望有一个包含节点“农布雷”简单“totalInstances”节点。 怎么了 ? 谢谢。

编辑 :对于更多的细节,我不明白为什么我得到三个对象命名为“totalInstances”,而只有一个在文件totalInstances.xml? 我希望有这样的输出:

object(SimpleXMLElement)[3]
      public 'totalInstances' => 
            object(SimpleXMLElement)[8]
                public 'nombre' => string '45' (length=2)

另外,我不知道明白什么意思的“[]”之间的数输出。

Answer 1:

是的,这确确实实是怪异。 但是,您不能使用var_dumpprint_r上一个SimpleXMLElement。 这些元素是有很多的魔法和var_dump这里是骗你的。 我的意思是真的撒谎,请参阅:

var_dump($config->totalInstances->totalInstances);

正在给NULL也没有的SimpleXMLElement可言。

在特定情况下,如果你想使用该文档作为的SimpleXMLElement具有扩展的实体,那么你可以使用LIBXML_NOENT选项 (替代实体):

$config = simplexml_load_file('config.xml', NULL, LIBXML_NOENT);

这确实允许遍历和访问由实体/ IES代表的实体。 在var_dump然后看起来好多了,太:

class SimpleXMLElement#4 (1) {
  public $totalInstances =>
  class SimpleXMLElement#3 (1) {
    public $nombre =>
    string(2) "45"
  }
}


文章来源: Don't understand the output in XML Entities and PHP SimpleXMLElement