在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');