yeg*_*256 5 php xml dom xml-namespaces
我试图通过DOM/PHP5生成以下XML:
<?xml version="1.0"?>
<root xmlns:p="myNS">
<p:x>test</p:x>
</root>
Run Code Online (Sandbox Code Playgroud)
这就是我正在做的事情:
$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();
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
<?xml version="1.0"?>
<root xmlns="myNS">
<x>test</x>
</root>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何使这个前缀工作?
bob*_*nce 11
$root = $xml->createElementNS('myNS', 'root');
Run Code Online (Sandbox Code Playgroud)
root不应该在命名空间中myNS.在原始示例中,它没有名称空间.
$x = $xml->createElementNS('myNS', 'x', 'test');
Run Code Online (Sandbox Code Playgroud)
设置qualifiedName p:x而不仅仅是x建议您要p用作此命名空间的前缀的序列化算法.但请注意,对于具有名称空间的XML的读取器,无论是否p:使用,都没有语义差异.
这将导致xmlns:p声明在<p:x>元素(第一个需要它)上输出.如果您希望声明位于根元素上(同样,XML-with-Namespaces读取器没有区别),您将必须setAttributeNS明确地使用它.例如.:
$root = $xml->createElementNS(null, 'root');
$xml->appendChild($root);
$x = $xml->createElementNS('myNS', 'p:x', 'test');
$root->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:p', 'myNS');
$root->appendChild($x);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8273 次 |
| 最近记录: |