带有HTML格式的PHP XML元素返回空结果

时间:2017-05-29 19:13:10

标签: php xml parsing html-entities

可悲的是,我无法控制我收到的XML数据。它是从我无法访问的系统导出的。但是,在收到文件后,我可以根据需要编辑文件。

XML文件大约有90.000行,包含大约900个我需要解析然后导入另一个系统的项目。

我的问题是XML在我解析的元素中包含(有时)HTML数据。当存在HTML数据时,解析返回空。

示例XML数据:

<item>
     <title>This is the tile</title>
     <description><p>This is a description</p></description>
     <comment>&lt;p&gt;This is an example&lt;/p&gt;</comment>
</item>

解析时,我能够获得&#34;标题&#34;内容。但是&#34;描述&#34;由于

标签,内容会返回空结果。

如果我删除了

标签或将其更改为&lt;p&gt;格式,那么我就能获得所需的结果。

我的问题是,XML数据有时会包含HTML标记(p,a,img,h2等),有时还会包含多个HTML标记和/或子标记。我想把所有内容都集成到一个字符串中。

与上面的XML示例相比,我尝试了以下但没有结果:

$xml = simplexml_load_file("uploaded_file.xml");

$item = $xml->xpath("/rss/channel/item");

foreach($item as $task) 
{

  $title    = $task->title;                             // Works
  $description = $task->description;                   // Empty
  $description = strip_tags($task->description);       // Empty
  $description = htmlentities($task->description);     // Empty
  $comment= strip_tags($task->comment);                // Works
...

如果我从&#34;描述&#34;中手动删除HTML标记。元素然后我得到正常的结果。但是,在如此大的文件中手动执行此操作并不是一个选项,并且标记并不总是相同。有时b,p,ul,li,a等。

我希望htmlentities()能够将HTML转换为XML支持的格式(即&lt;p&gt;),但它似乎不起作用。

任何协助都会得到适当的帮助。如果需要,可以提供更多的exmaples。

1 个答案:

答案 0 :(得分:1)

终于找到了一个适用于我的解决方案,使用 - &gt; asXML()

 $description = strip_tags($task->description->asXML());