如何使用DOM / PHP声明XML名称空间前缀?

前端之家收集整理的这篇文章主要介绍了如何使用DOM / PHP声明XML名称空间前缀?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过DOM / PHP5生成以下XML:
<?xml version="1.0"?>
<root xmlns:p="myNS">
  <p:x>test</p:x>
</root>

这就是我正在做的事情:

$xml = new DOMDocument('1.0');
$root = $xml->createElementNS('myNS','root');
$xml->appendChild($root);
$x = $xml->createElementNS('myNS','x','test');
$root->appendChild($x);
echo $xml->saveXML();

这就是我得到的:

<?xml version="1.0"?>
<root xmlns="myNS">
  <x>test</x>
</root>

我究竟做错了什么?如何使这个前缀工作?

解决方法

$root = $xml->createElementNS('myNS','root');

root不应该在命名空间myNS中.在原始示例中,它没有名称空间.

$x = $xml->createElementNS('myNS','test');

设置p:x的qualifiedName而不是x,以建议您使用p作为此命名空间的前缀的序列化算法.但请注意,对于具有命名空间的XML的读取器,无论是否使用p:都没有语义差异.

这将导致xmlns:p声明输出到< p:x>元素(第一个需要它).如果您希望声明位于根元素上(同样,对于带有命名空间的XML读取器没有区别),您必须明确地设置它的属性.例如.:

$root = $xml->createElementNS(null,'p:x','test');
$root->setAttributeNS('http://www.w3.org/2000/xmlns/','xmlns:p','myNS');
$root->appendChild($x);

猜你在找的HTML相关文章