問題があります。で名前空間を含む HTML スニペットをロードしたい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()
メソッド、またはマークアップを検証しないメソッドです。したがって、この2つの方法の組み合わせ。
これまでの私のコード:
$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);
私が望むものを達成する方法はありますか?アドバイスをいただければ幸いです。
編集HTML で名前空間を保持するオプションを提供する libxml2 の拡張要求を開きました: https://bugzilla.gnome.org/show_bug.cgi?id=711670