如果在创建和插入属性时引入了新的命名空间,则 createAttributeNS() 的行为与 createElementNS() 不同。
(1) 位置:使用 createAttributeNS(),新命名空间是在文档元素级别声明的。相比之下,createElementNS() 在受影响的元素本身的级别声明了新的命名空间。
(2) 时间:使用 createAttributeNS(),新命名空间在创建属性时立即在文档中声明 - 属性实际上不需要被插入。createElementNS() 在元素未插入之前不会影响文档。
一个例子
<?php
$source = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<root><tag></tag></root>
XML;
$doc = new DOMDocument( '1.0' );
$doc->loadXML( $source );
$attr_ns = $doc->createAttributeNS( '{namespace_uri_here}', 'example:attr' );
print $doc->saveXML() . "\n";
$attr_ns->value = 'value';
$doc->getElementsByTagName( 'tag' )->item(0)->appendChild( $attr_ns );
print $doc->saveXML() . "\n";
$doc = new DOMDocument( '1.0' );
$doc->loadXML( $source );
$elem_ns = $doc->createElementNS( '{namespace_uri_here}', 'example:newtag' );
print $doc->saveXML() . "\n";
$doc->getElementsByTagName( 'tag' )->item(0)->appendChild( $elem_ns );
print $doc->saveXML() . "\n";
?>