我有问题。我想用DOMDocument
.
<div class="something-first">
<div class="something-child something-good another something-great">
<my:text value="huhu">
</div>
</div>
但我不知道如何保留命名空间。我尝试加载它,loadHTML()
但 HTML 没有名称空间,因此它们被剥离。
我尝试加载它,loadXML()
但这不起作用,因为<my:text value="huhu">
XML 不正确。
我需要的是一种loadHTML()
不剥离命名空间的loadXML()
方法或一种不验证标记的方法。所以这两种方法的结合。
到目前为止我的代码:
$html = '<div class="something-first">
<div class="something-child something-good another something-great">
<my:text value="huhu">
</div>
</div>';
libxml_use_internal_errors(true);
$domDoc = new DOMDocument();
$domDoc->formatOutput = false;
$domDoc->resolveExternals = false;
$domDoc->substituteEntities = false;
$domDoc->strictErrorChecking = false;
$domDoc->validateOnParse = false;
$domDoc->loadHTML($html/*, LIBXML_NOERROR | LIBXML_NOWARNING*/);
$xpath = new DOMXPath($domDoc);
$xpath->registerNamespace ( 'my', 'http://www.example.com/' );
// -----> This results in zero nodes cause namespace gets stripped by loadHTML()
$nodes = $xpath->query('//my:*');
var_dump($nodes);
有没有办法实现我想要的?我会很高兴任何建议。
编辑我打开了对 libxml2 的增强请求,以提供在 HTML 中保留命名空间的选项:https ://bugzilla.gnome.org/show_bug.cgi?id=711670