[英]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.