在php中创建具有相同命名空间的多个xml节点

时间:2021-12-18 16:52:38

I have the following code

我有以下代码

    $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 will produce the following xml as output

IT将生成以下xml作为输出

<?xml version="1.0" ?>
<ttauth:authHeader xmlns:ttauth="http://somenamespace">
<ttauth:Accessuser>
    ApiUserFor136
</ttauth:Accessuser>
<ttauth:Accesscode>
    test1234
</ttauth:Accesscode>
</ttauth:authHeader>

But I want the following output

但我想要以下输出

<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>

See the xmlns is not included in elements other than root element but I want xmlns to be included in all elements Is there anything I am doing wrong ??

看到xmlns不包含在除根元素之外的元素中但是我希望xmlns包含在所有元素中是否有什么我做错了?

2 个解决方案

#1


1  

Probably the PHP parser does not add renaming of the same namespace "http://somenamespace" with the same prefix "ttauth" because it is redundant. Both xmls you shown ( the output and expected ) are equivalent. If you want to be sure you have the namespaces attributes as you want, you should add them manually by using addAtribute - http://www.php.net/manual/en/domdocument.createattribute.php. See the following code snippet:

可能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);

Hope it helps

希望能帮助到你

#2


0  

instead of using

而不是使用

$accesuser = $dom->createElementNS('http://somenamespace', 'ttauth:Accessuser','aassdd');

I used

我用了

$accesuser = $dom->createElement('http://somenamespace', 'ttauth:Accessuser','aassdd');

and then

接着

$accesuser->setAttribute('xmlns:ttauth', ('http://somenamespace');

it works fine for any number of nodes

它适用于任意数量的节点

#1


1  

Probably the PHP parser does not add renaming of the same namespace "http://somenamespace" with the same prefix "ttauth" because it is redundant. Both xmls you shown ( the output and expected ) are equivalent. If you want to be sure you have the namespaces attributes as you want, you should add them manually by using addAtribute - http://www.php.net/manual/en/domdocument.createattribute.php. See the following code snippet:

可能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);

Hope it helps

希望能帮助到你

#2


0  

instead of using

而不是使用

$accesuser = $dom->createElementNS('http://somenamespace', 'ttauth:Accessuser','aassdd');

I used

我用了

$accesuser = $dom->createElement('http://somenamespace', 'ttauth:Accessuser','aassdd');

and then

接着

$accesuser->setAttribute('xmlns:ttauth', ('http://somenamespace');

it works fine for any number of nodes

它适用于任意数量的节点