簡體   English   中英

在PHP XPath查詢中按名稱空間獲取HTML標簽

[英]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方法將觸發libxmlHTML 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM