我有以下代码
$dom = new DOMDocument('1.0', 'utf-8');
$headerNS = $dom->createElementNS('http://somenamespace', 'ttauth:authHeader');
$accesuser = $dom->createElementNS('http://somenamespace', 'ttauth:Accessuser','aassdd');
$accesscode = $dom->createElementNS('http://somenamespace', 'ttauth:Accesscode','aassdd');
$headerNS->appendChild($accesuser);
$headerNS->appendChild($accesscode);
echo "<pre>";
echo ($dom->saveXML($headerNS));
echo "</pre>";
IT将生成以下xml作为输出
<?xml version="1.0" ?>
<ttauth:authHeader xmlns:ttauth="http://somenamespace">
<ttauth:Accessuser>
ApiUserFor136
</ttauth:Accessuser>
<ttauth:Accesscode>
test1234
</ttauth:Accesscode>
</ttauth:authHeader>
但我想要以下输出
<ttauth:authHeader xmlns:ttauth="http://somenamespace">
<ttauth:Accessuser xmlns:ttauth="http://somenamespace">
aassdd
</ttauth:Accessuser>
<ttauth:Accesscode xmlns:ttauth="somenamespace">
aassdd
</ttauth:Accesscode>
</ttauth:authHeader>
请参阅 xmlns不包含在除根元素之外的元素中,但我希望xmlns包含在所有元素中我有什么问题吗?
答案 0 :(得分:1)
可能PHP解析器不会添加具有相同前缀“ttauth”的相同名称空间“http:// somenamespace”的重命名,因为它是多余的。您显示的两个xml(输出和预期)都是等效的。如果您想确保拥有所需的命名空间属性,则应使用addAtribute - http://www.php.net/manual/en/domdocument.createattribute.php手动添加它们。请参阅以下代码段:
$domAttribute = $domDocument->createAttribute('xmlns:ttauth');
$domAttribute->value = 'http://somenamespace';
$accessuser->appendChild($domAttribute);
希望有所帮助
答案 1 :(得分:0)
而不是使用
$accesuser = $dom->createElementNS('http://somenamespace', 'ttauth:Accessuser','aassdd');
我用过
$accesuser = $dom->createElement('http://somenamespace', 'ttauth:Accessuser','aassdd');
然后
$accesuser->setAttribute('xmlns:ttauth', ('http://somenamespace');
它适用于任意数量的节点