<!-- MEMCACHE empty -->
上述現在導致腳本的問題,因爲它現在放置在我試圖遠程訪問的XML文件的頂部。 simpleXML不喜歡XML文件不再正確形成的事實。我試圖逃避錯誤,但似乎沒有辦法。任何人都可以指出我如何解決這個問題?轉義simpleXML錯誤
<!-- MEMCACHE empty -->
上述現在導致腳本的問題,因爲它現在放置在我試圖遠程訪問的XML文件的頂部。 simpleXML不喜歡XML文件不再正確形成的事實。我試圖逃避錯誤,但似乎沒有辦法。任何人都可以指出我如何解決這個問題?轉義simpleXML錯誤
只要XML文件格式不正確,SimpleXML將不會加載它......因此,在提供給SimpleXML之前,您可能需要在該XML文件上執行一些字符串操作。
一些很簡單的事情,基於str_replace可能會做,如果這個「MEMCACHE空」的東西總是相同的;否則,一些正則表達式可能會做的伎倆;-)
所以:
simplexml_load_string
也許它不是真的「乾淨」......但應該工作,快速,簡單...
舉例來說,如果你非XML看起來是這樣的:
$xml_string = <<<XML
<!-- MEMCACHE empty -->
<?xml version="1.0" ?>
<data>
<glop>TEST</glop>
<other>GLOP</other>
</data>
XML;
你可能想用這個:
$real_xml_string = str_replace("<!-- MEMCACHE empty -->\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("#<!-- MEMCACHE (\w+) -->\n#", '', $xml_string);
(可能需要適應一下,根據您的需要)
當然,在你的情況下,$xml_string
不會存儲在源代碼中,但通過類似curl或file_get_contents
獲得,我想。
如果是在文件的最頂端像
<!-- MEMCACHE empty -->
<?xml version="1.0" ?>
<root> ... </root>
其次,我認爲做的最好的事情是將preg_replace("/^<!-- MEMCACHE empty -->$/", "", $xml_file)
它空或空。
這是因爲<?xml version="1.0" ?>
需要成爲文件的第一行,因爲它在任何情況下都是有效的XML,DOM,SAX,SimpleXML或其他。
意思是儘快回覆。工作得很好,謝謝!我做了更改後,他們禁用了memcache。去搞清楚。 – Eric 2009-09-26 03:02:31
不客氣:-) ;;運氣不好,關於解決問題後禁用memcached:-D – 2009-09-26 08:55:41