PHP 日本大会 2024

DOMElement::getElementsByTagNameNS

(PHP 5, PHP 7, PHP 8)

DOMElement::getElementsByTagNameNS按 namespaceURI 和 localName 获取元素

描述

public DOMElement::getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList

此函数获取所有具有给定localNamenamespace的后代元素。

参数

namespace

要匹配的元素的命名空间 URI。特殊值"*"匹配所有命名空间。传递null匹配空命名空间。

localName

要匹配的元素的本地名称。特殊值"*"匹配所有本地名称。

返回值

此函数返回一个新的DOMNodeList类实例,其中包含所有匹配的元素,其顺序与在对该元素树进行前序遍历时遇到的顺序相同。

变更日志

版本 描述
8.0.3 namespace现在可以为空。

参见

添加注释

用户贡献注释 1 条注释

2
spam at chovy dot com
15 年前
我难以一次性去除所有针对某个 ns-uri 的默认 NS 属性,不过以下方法有效……首先去除 documentElement 命名空间,然后使用 getElementsByTagNameNS()——文档应该反映出第二个参数实际上是标签的名称,而不是我最初预期的本地命名空间前缀。

<?php

function strip_default_ns( $xml = null, $ns_uri = 'http://example.com/XML-Foo' ) {
$ns_local = '';
$ns_tag = '*';

if ( empty(
$xml) ) return false;

// 删除文档命名空间
$dom = new DOMDocument();
$dom->loadXML($xml);
$dom->documentElement->removeAttributeNS($ns_uri, $ns_local);

// 删除元素命名空间
foreach ( $dom->getElementsByTagNameNS($ns_uri, $ns_tag) as $elem ) {
$elem->removeAttributeNS($ns_uri, $ns_local);
}

return
$dom->saveXML();
}

$stripped_xml = strip_default_ns($the_xml);

?>

现在 $stripped_xml 可以利用在其上运行 XPath 查询来处理 NULL 命名空间。
To Top