正如标题所说。
我正在处理大量下载的XML文件。其中一些文件包含无效字符,例如“US”或“VB”(垂直制表符)。不知道为什么那些角色开始。对我们来说,我真的无能为力。
$z = new XMLReader;
$z->open('compress.zlib://'.$file, "UTF-8");
while ($z->read() && $z->name !== 'p');
while ($z->name === 'p'){
try
{
$node = new SimpleXMLElement($z->readOuterXML());
}catch(Exception $e)
{
echo $e->getMessage();
}
// And so on
}
我收到错误消息“无法将字符串解析为XML”。
我可以在这做什么?
答案 0 :(得分:2)
毕竟终于找到了解决方案。
我决定使用fopen构建&过程中的过程。这就是我最终的结果:
$handle = fopen('compress.zlib://'.$file, 'r');
$xml_source = '';
$record = false;
if($handle){
while(($buffer = fgets($handle, 4096)) !== false){
if(strpos($buffer, '<open_tag>') > -1){
$xml_source = '<?xml version="1.0" encoding="UTF-8"?>';
$record = true;
}
if(strpos($buffer, '</close_tag') > -1){
$xml_source .= $buffer;
$record = false;
$xml = simplexml_load_string(stripInvalidXml($xml_source));
// ... do stuff here with the xml element
}
if($record){
$xml_source .= $buffer;
}
}
}
函数simplexml_load_string()是提供的quickshiftin。像魅力一样。
答案 1 :(得分:0)
在使用XMLReader解析之前,尝试通过something like this运行它。