I had some difficulty stripping all default NS attributes for an ns-uri in one shot, the following will work though...first strip the documentElement namespace, then getElementsByTagNameNS() -- the documentation should reflect that the 2nd argument is actually the name of the tag, not the local namespace prefix as I first expected:
<?php
function strip_default_ns( $xml = null, $ns_uri = 'http://example.com/XML-Foo' ) {
$ns_local = '';
$ns_tag = '*';
if ( empty($xml) ) return false;
//remove document namespace
$dom = new DOMDocument();
$dom->loadXML($xml);
$dom->documentElement->removeAttributeNS($ns_uri, $ns_local);
//strip element namespaces
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 can now take advantage of running XPath queries on it for the NULL namespace.
DOMElement::getElementsByTagNameNS
(PHP 5)
DOMElement::getElementsByTagNameNS — دریافت گره با استفاده از namespaceURI و localName
Description
این تابع تمام اجزا زیرین با localName و namespaceURI را باز میگرداند.
Parameters
- namespaceURI
-
فضای نام URI.
- localName
-
نام محلی. از * برای بازگرداندن تمام اجزا در درخت استفاده کنید.
Return Values
این تابع نمونه جدید کلاس DOMNodeList تمام اجزای تطبیق داده شده به ترتیب که با آنها در گردش پیشترتیب درخت اجزا روبرو شده است باز میگرداند.
spam at chovy dot com ¶
3 years ago
