2009-08-13 67 views
0
<!-- MEMCACHE empty --> 

上述現在導致腳本的問題,因爲它現在放置在我試圖遠程訪問的XML文件的頂部。 simpleXML不喜歡XML文件不再正確形成的事實。我試圖逃避錯誤,但似乎沒有辦法。任何人都可以指出我如何解決這個問題?轉義simpleXML錯誤

回答

1

只要XML文件格式不正確,SimpleXML將不會加載它......因此,在提供給SimpleXML之前,您可能需要在該XML文件上執行一些字符串操作。

一些很簡單的事情,基於str_replace可能會做,如果這個「MEMCACHE空」的東西總是相同的;否則,一些正則表達式可能會做的伎倆;-)

所以:

也許它不是真的「乾淨」......但應該工作,快速,簡單...


舉例來說,如果你非XML看起來是這樣的:

$xml_string = <<<XML 
&lt;!-- MEMCACHE empty --&gt; 
<?xml version="1.0" ?> 
<data> 
    <glop>TEST</glop> 
    <other>GLOP</other> 
</data> 
XML; 

你可能想用這個:

$real_xml_string = str_replace("&lt;!-- MEMCACHE empty --&gt;\n", '', $xml_string); 

注底 「\n」:你需要刪除該新行;-)

它給你一個字符串包含:

<?xml version="1.0" ?> 
<data> 
    <glop>TEST</glop> 
    <other>GLOP</other> 
</data> 

這是良構的XML;所以你現在可以加載它:

$xml = simplexml_load_string($real_xml_string); 
var_dump($xml); 

,你會得到你想要的東西:如果「狀態」中的MEMCACHE事情並不總是「空」

object(SimpleXMLElement)[1] 
    public 'glop' => string 'TEST' (length=4) 
    public 'other' => string 'GLOP' (length=4) 


,你可能會使用一些正則表達式;這樣的事情,我想,可能會做的,而不是str_replace電話,:

$real_xml_string = preg_replace("#&lt;!-- MEMCACHE (\w+) --&gt;\n#", '', $xml_string); 

(可能需要適應一下,根據您的需要)


當然,在你的情況下,$xml_string不會存儲在源代碼中,但通過類似curl或file_get_contents獲得,我想。

+0

意思是儘快回覆。工作得很好,謝謝!我做了更改後,他們禁用了memcache。去搞清楚。 – Eric 2009-09-26 03:02:31

+0

不客氣:-) ;;運氣不好,關於解決問題後禁用memcached:-D – 2009-09-26 08:55:41

0

如果是在文件的最頂端像

&lt;!-- MEMCACHE empty --&gt; 
<?xml version="1.0" ?> 
<root> ... </root> 

其次,我認爲做的最好的事情是將preg_replace("/^&lt;!-- MEMCACHE empty --&gt;$/", "", $xml_file)

這是因爲<?xml version="1.0" ?>需要成爲文件的第一行,因爲它在任何情況下都是有效的XML,DOM,SAX,SimpleXML或其他。