<!-- MEMCACHE empty -->
以上现在导致脚本出现问题,因为它现在位于我正在尝试远程访问的XML文件的顶部。 simpleXML不喜欢XML文件不再良好的事实。我试图逃避错误,但这似乎不是诀窍。有人能指出我如何解决这个问题吗?
答案 0 :(得分:1)
只要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);
你得到你想要的东西:
object(SimpleXMLElement)[1]
public 'glop' => string 'TEST' (length=4)
public 'other' => string 'GLOP' (length=4)
如果MEMCACHE中的“status”并不总是“空”,你可以使用一些正则表达式;我想,可能会这样,而不是str_replace
电话:
$real_xml_string = preg_replace("#<!-- MEMCACHE (\w+) -->\n#", '', $xml_string);
(可能需要根据您的需要进行一些调整)
当然,在您的情况下,$xml_string
不会存储在源代码中,而是通过像curl或file_get_contents
之类的东西获得,我猜想。
答案 1 :(得分:0)
如果它位于文件的最顶部,如
<!-- MEMCACHE empty -->
<?xml version="1.0" ?>
<root> ... </root>
然后我认为最好的办法是preg_replace("/^<!-- MEMCACHE empty -->$/", "", $xml_file)
将清空或 null 。
那是因为<?xml version="1.0" ?>
需要是文件的第一行,它在任何情况下都是有效的XML,DOM,SAX,SimpleXML或其他。