[英]Get HTML-tags by namespace in PHP XPath Query
假設我有以下HTML代碼段:
<div abc:section="section1">
<p>Content...</p>
</div>
<div abc:section="section2">
<p>Another section</p>
</div>
如何為設置了abc:section
屬性的每個<div>
的DOMNode獲取一個DOMNodeList(在PHP中)。
目前我有以下代碼
$dom = new DOMDocument();
$dom->loadHTML($html)
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('abc', 'http://xml.example.com/AbcDocument');
遵循XPath將不起作用:
$xpath->query('//@abc:section');
$xpath->query('//*[@abc:section]');
加載的HTML始終只是一個片段,我正在使用DOMDocument函數對其進行轉換,並將其提供給模板。
loadHTML
方法將觸發libxml的HTML Parser模塊 。 Afaik,生成的HTML樹將不包含名稱空間,因此在此處無法使用XPath查詢它們。 你可以做
$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXPath($dom);
foreach ($dom->getElementsByTagName('div') as $node) {
echo $node->getAttribute('abc:section');
}
echo $dom->saveHTML();
或者,您可以使用//div/@*
來獲取所有屬性,其中包括命名空間的屬性。 但是,您不能在查詢中有一個冒號,因為這需要注冊名稱空間前綴,但是如上所述,對於HTML樹而言,它不起作用。
另一種選擇是使用//@*[starts-with(name(), "abc:section")]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.