2014-01-07 34 views
0

我有一个问题,当我尝试读取与PHP函数使用simplexml_load_file一个XML文档()这是警告我得到PHP:SimpleXML的警告分析器错误:AttValue:“或”预期

Warning: simplexml_load_file(): URL:81: parser error : AttValue: " or ' expected in URL on line 15 
Warning: simplexml_load_file(): <img src=elite.png><br> in URL on line 15 
Warning: simplexml_load_file():^in URL on line 15 
Warning: simplexml_load_file(): URL:81: parser error : attributes construct error in URL on line 15 
Warning: simplexml_load_file(): <img src=elite.png><br> in URL line 15 
Warning: simplexml_load_file():^in URL on line 15 
Warning: simplexml_load_file(): URL:81: parser error : Couldn't find end of Start Tag img >line 81 in URL on line 15 
Warning: simplexml_load_file(): <img src=elite.png><br> in URL on line 15 
Warning: simplexml_load_file():^in URL on line 15 
Warning: simplexml_load_file(): URL:82: parser error : Opening and ending tag mismatch: br line 81 and programbeskrivelse in URL on line 15 
Warning: simplexml_load_file(): er vurderet og rådgivet af de bedste affiliates i branchen.</programbeskrivelse in URL on line 15 
Warning: simplexml_load_file():^in URL on line 15 
Warning: simplexml_load_file(): URL:91: parser error : Opening and ending tag mismatch: br line 80 and program in URL on line 15 
Warning: simplexml_load_file(): </program> in URL on line 15 
Warning: simplexml_load_file():^in URL on line 15 

由于!你看,我认为这是在XML文件中的<img src=elite.png>标签,它的问题是:

<program><programid>ID</programid> 
<programnavn>NAME</programnavn> 
<programurl>URL</programurl> 
<programbeskrivelse>SOME TEXT 
<br> 
<img src=elite.png><br> 
SOME MORE TEXT</programbeskrivelse> 
<programbetingelser></programbetingelser> 
<kategoriid>5</kategoriid> 
<kategorinavn>Tøj, mode, livsstil o.l.</kategorinavn> 
<feed>ja</feed> 
<kliksats>0.00</kliksats> 
<leadsats>0.00</leadsats> 
<provision>10.00</provision> 
<affiliatelink>N/A</affiliatelink> 
</program> 

但它是一个外部XML文件,所以我不能只是让XML文件中的变化有什么。如何忽略标签,在使用SimpleXML之前让我出来?还是有其他方法可以做到吗?

注:我的所有URL都rewriten与URL

我曾尝试使用路径上stripslashes()函数,而不是那的问题!

回答

1

我想出了基于Chrashspeeders意见的解决方案:

$remove = file_get_contents(stripslashes("URL")); 

$remove = preg_replace("/<programbeskrivelse>[\d\D]*?<\/provision>/", "", $remove); 

$remove = str_replace(array("&amp;", "&"), array("&", "&amp;"), $remove); 

$xml = simplexml_load_string($remove); 

我不知道性能什么,但它的工作原理。

$remove = str_replace(array("&amp;", "&"), array("&", "&amp;"), $remove); 

是针对链接中的&字符。

0

问题是XML格式错误。如果您要修复错误(将引号添加到属性值),那么在读取<programbeskrivelse>节点的值时会导致其他问题。 SimpleXML将忽略字符串内的标签,使值为SOME TEXT。该节点的值应该很可能在CDATA内。您可能能够检测字符串内的标签并将节点值包装在CDATA中,但这可能会非常棘手。 Offhand我想不出一个快速的解决方案。

+0

我唯一感兴趣的价值观,是 所以我不需要价值 – mschadegg

+0

您可以用[file_get_contents()函数(HTTP加载XML文件的内容: //us1.php.net/manual/en/function.file-get-contents.php)并删除那些你不关心的值的节点,然后使用[simplexml_load_string()](http: //us1.php.net/manual/en/function.simplexml-load-string.php)。只要确保你保留根节点(在这种情况下,''和'')。 – Crashspeeder

+0

当我有超过7000行的XML文件时,性能会不会是无效的? – mschadegg