我在一次性移除指定命名空間 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 查詢。