PHP Conference Japan 2024

DOMElement::getElementsByTagNameNS

(PHP 5, PHP 7, PHP 8)

DOMElement::getElementsByTagNameNS透過命名空間 URI 和本地名稱取得元素

說明

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

此函式會擷取所有具有指定 localNamenamespace 的後代元素。

參數

namespace

要比對之元素的命名空間 URI。特殊值 "*" 會比對所有命名空間。傳遞 null 會比對空的命名空間。

localName

要比對的元素的本地名稱。特殊值 "*" 會比對所有本地名稱。

回傳值

此函式會回傳一個新的 DOMNodeList 類別的實例,其中包含所有符合條件的元素,順序依照它們在此元素樹的前序遍歷中遇到的順序排列。

更新日誌

版本 說明
8.0.3 namespace 現在可以為 null。

另請參閱

新增筆記

使用者貢獻的筆記 1 則筆記

spam at chovy dot com
15 年前
我在一次性移除指定命名空間 URI 的所有預設命名空間屬性時遇到了一些困難,不過以下方法可行... 首先移除 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` 可以利用在其上執行 NULL 命名空間的 XPath 查詢。
To Top