我遇到了一种情况,我试图解析包含<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 />
,但是我想我想看看是否有“更好”的事情要做这里。有什么想法吗?谢谢!
答案 0 :(得分:2)
您可以做的是像这样替换/删除<br>
标签:
simplexml_load_string(str_replace("<br>", "", $string));
答案 1 :(得分:1)
尽管SimpleXML扩展名没有HTML解析模式,但DOM扩展名有,并且一旦被解析,它们共享相同的内部代码。
因此您可以像这样解析文档:
DOMDocument
对象。loadHTML
method解析文档。simplexml_import_dom
函数将结果“导入”到SimpleXML中。请注意,这不会重新解析文档,只是将内部表示重新包装在另一个PHP对象中。例如
$dom = new DOMDocument;
$dom->loadHTML($html);
$sxml = simplexml_import_dom($dom);
结果是一个SimpleXML对象,您可以照常使用它。