2013-04-20 58 views
0

我在XML中使用實體,我不理解我的結果。不理解XML實體和PHP中的輸出SimpleXMLElement

我有一個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

所以我加載文件config.xml在類SimpleXMLElement的幫助下:

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

然後我輸出變量$ config with av ar_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.xml中只有一個名爲「totalInstances」的三個對象?我希望有這樣的輸出:

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

而且,我不知道明白什麼意思的「[]」之間的數輸出。

+0

它是什麼你不明白嗎?我只能在那裏看到一個應該正確的'nombre'節點? – silkfire 2013-04-20 11:11:07

+0

@silkfire,我認爲OP不明白爲什麼有3個'totalInstances'(SimpleXML)元素,因爲他只在其XML文檔中定義了一個元素... – Havelock 2013-04-20 11:15:52

回答

1

是的,這確實看起來很奇怪。但是,您不能在SimpleXMLElement上使用var_dumpprint_r。這些元素都具有很多魔力,並且這裏對你說謊。我的意思是真的撒謊,請參閱:

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

是給NULL並沒有的SimpleXMLElement可言。

在特定情況下,如果你想使用該文件作爲SimpleXMLElement具有擴展的實體,那麼你可以使用LIBXML_NOENT option(替代實體):

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

這確實允許遍歷並訪問由實體代表的實體。該var_dump然後看起來好多了,太:

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

很好的答案,謝謝 – 2013-04-22 17:15:24

+0

這可能不是很清楚'var_dump' /'print_r'的答案對於一般調試simplexml對象來說並不是很好,不僅僅是針對你的情況。然而,你發現的情況也是例外。與[如何使用SimpleXML獲取屬性?](http://stackoverflow.com/q/3410520/367456)進行比較,其中顯示了另一種情況,即「說謊」。 – hakre 2013-04-22 17:28:42

+0

我想,魔術和謊言的意思是「比你期望的更復雜的東西」。簡而言之,這個魔術來自哪裏?非常感謝。 – 2013-04-22 17:49:46