微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用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);

原文地址:https://www.jb51.cc/html/231378.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐