可以使simplexml_load_string处理<br/>标签吗?

时间:2018-07-18 21:04:02

标签: php xml simplexml simplexml-load-string

我遇到了一种情况,我试图解析包含<br>标记的HTML块-而不是<br />。 simplexml_load_string正确处理<br />,但使用<br>引发警告(并且无法返回解析):

simplexml_load_string(): Entity: line 1: parser error : Opening and ending tag mismatch: br line 1 and div [warning]
simplexml_load_string(): <div class='dummy_root'><div>Basic text.<br> More text.</div></div>

我不是将<br>放在文本中的人,因此我必须找到一种处理它的方法。我当然可以编写某种预处理/清理/文本整理代码,以将<br>替换为<br />,但是我想我想看看是否有“更好”的事情要做这里。有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

您可以做的是像这样替换/删除<br>标签:

simplexml_load_string(str_replace("<br>", "", $string));

答案 1 :(得分:1)

尽管SimpleXML扩展名没有HTML解析模式,但DOM扩展名有,并且一旦被解析,它们共享相同的内部代码。

因此您可以像这样解析文档:

  1. 创建一个DOMDocument对象。
  2. 使用the loadHTML method解析文档。
  3. 使用simplexml_import_dom函数将结果“导入”到SimpleXML中。请注意,这不会重新解析文档,只是将内部表示重新包装在另一个PHP对象中。

例如

$dom = new DOMDocument;
$dom->loadHTML($html);
$sxml = simplexml_import_dom($dom);

结果是一个SimpleXML对象,您可以照常使用它。