簡體   English   中英

在php中創建具有相同名稱空間的多個xml節點

[英]creating multiple xml nodes with same namespaces in php

我有以下代碼

    $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不包含在除root元素之外的其他元素中,但是我希望xmlns包含在所有元素中。我做錯了嗎?

PHP解析器可能不會添加具有相同前綴“ ttauth”的相同名稱空間“ http:// somenamespace”的重命名,因為這是多余的。 您顯示的兩個xml(輸出和期望的)都是等效的。 如果要確保擁有所需的名稱空間屬性,則應使用addAtribute- http: //www.php.net/manual/zh/domdocument.createattribute.php手動添加它們。 請參見以下代碼段:

$domAttribute = $domDocument->createAttribute('xmlns:ttauth');
$domAttribute->value = 'http://somenamespace';
$accessuser->appendChild($domAttribute);

希望能幫助到你

而不是使用

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

我用了

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

接着

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

它適用於任何數量的節點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM