在php中创建具有相同名称空间的多个xml节点
我有以下代码在php中创建具有相同名称空间的多个xml节点,php,xml,domdocument,xml-namespaces,Php,Xml,Domdocument,Xml Namespaces,我有以下代码 $dom = new DOMDocument('1.0', 'utf-8'); $headerNS = $dom->createElementNS('http://somenamespace', 'ttauth:authHeader'); $accesuser = $dom->createElementNS('http://somenamespace', 'ttauth:Accessuser','aassdd'); $ac
$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>";
$dom=新的DOMDocument('1.0','utf-8');
$headerNS=$dom->createElements('http://somenamespace'、'ttauth:authHeader');
$accesuser=$dom->CreateElements('http://somenamespace'、'ttauth:Accessuser'、'aassdd');
$accesscode=$dom->CreateElements('http://somenamespace'、'ttauth:Accesscode'、'aasdd');
$headerNS->appendChild($accesuser);
$headerNS->appendChild($accesscode);
回声“;
echo($dom->saveXML($headerNS));
回声“;
它将生成以下xml作为输出
<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>
ApiUserFor136
测试1234
但是我想要以下输出
$domAttribute = $domDocument->createAttribute('xmlns:ttauth');
$domAttribute->value = 'http://somenamespace';
$accessuser->appendChild($domAttribute);
aassdd
aassdd
请参见xmlns不包含在根元素以外的元素中,但我希望xmlns包含在所有元素中是否有任何错误???可能PHP解析器没有添加相同名称空间的重命名”http://somenamespace具有相同的前缀“ttauth”,因为它是冗余的。您显示的两个XML(输出和预期)是等效的。如果要确保您拥有所需的名称空间属性,应使用addAtribute-手动添加它们。请参阅以下代码段:
$accesuser = $dom->createElementNS('http://somenamespace', 'ttauth:Accessuser','aassdd');
希望它有帮助,而不是使用
$accesuser = $dom->createElement('http://somenamespace', 'ttauth:Accessuser','aassdd');
我曾经
$accesuser->setAttribute('xmlns:ttauth', ('http://somenamespace');
然后
它适用于任意数量的节点这也有一个问题。当我将同一属性附加到两个子节点时,它不起作用:(这是一种正确的行为。即使每个子节点具有相同的内容,也应该为每个子节点创建不同的属性。
$accesuser->setAttribute('xmlns:ttauth', ('http://somenamespace');