我正在尝试使用 SimpleXMLElement 的 SimpleXML 的 addChild 方法(实际上是 SimpleXMLIterator,它是 SimpleXMLElement 的子类)来添加子元素。
我的问题是源文档包含有命名空间和没有命名空间的混合元素。这是一个简单的(没有双关语)示例:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:a xmlns:ns1="http://www.abc.com">
</ns1:a>
PHP代码是:
$it = new SimpleXMLIterator ('./test.xml', 0, true);
$it->addChild('d', 'another!'); // adds new child element to parent's NS
$it->addChild('c', 'no namespace for me!', ''); // puts xmlns="" every time :(
//output xml in response:
header('Content-Type: text/xml');
echo $it->saveXML();
问题 - 正如评论所述 - 是如果我想在具有命名空间的父元素内放置一个没有命名空间的子元素,我每次都会得到一个空的 XML 命名空间属性(上述 PHP 代码的输出):
<?xml version="1.0" encoding="UTF-8"?>
<ns1:a xmlns:ns1="http://www.abc.com">
<ns1:d>another!</ns1:d>
<c xmlns="">no namespace for me!</c>
</ns1:a>
虽然 Web 浏览器和 XML 解析器(例如 Xerces)似乎都不介意这种多余的标记,但我觉得有点烦人,我似乎无法告诉它停止这样做。
有人有解决方案还是我反应过度?
:}