php嵌套带有属性的soap xml

时间:2016-09-02 18:52:07

标签: php xml soap

我需要用soap生成这个xml,但我无法想出用属性创建一个嵌套的xml。

我能够做到这一点

<ns1:SelectedSupplements>
          <ns1:SupplementInfo suppId="16" supTotalPrice="0.00" suppType="4" />
          <ns1:SupplementInfo suppId="1000615" supTotalPrice="360.00" suppType="8" />
</ns1:SelectedSupplements>

但不是这个

<ns1:SelectedSupplements>
          <ns1:SupplementInfo suppId="16" supTotalPrice="0.00" suppType="4" />
          <ns1:SupplementInfo suppId="1000615" supTotalPrice="360.00" suppType="8">
              <ns1:SupAgeGroup>
                     <ns1:SuppAges suppFrom="1" suppTo="7" suppQuantity="1" suppPrice="40.00"/>
                     <ns1:SuppAges suppFrom="8" suppTo="99" suppQuantity="2" suppPrice="80.00"/>
              </ns1:SupAgeGroup>
          </ns1:SupplementInfo>
    </ns1:SelectedSupplements>

这是我的第一个xml

的代码
$room_class = new stdClass();
$supplement = array();

foreach($results["hotels"]["hotel"][0]["options"]["option"][$key]["fees"]["fee"] as $one_supp)
{
    array_push($supplement, array("suppId"=> $one_supp["suppId"] , "supTotalPrice" => $one_supp["amt"] , "suppType" => $one_supp["supptType"]));
}
$room_class->SelectedSupplements = $supplement;

1 个答案:

答案 0 :(得分:-1)

您可以使用DOMDocument http://php.net/manual/en/class.domdocument.php来完成此任务。

$doc = new DOMDocument();
$doc->formatOutput = true;
$root = $doc->createElement( 'ns1:SelectedSupplements' );
$root = $doc->appendChild( $root );

$supplementInfo = $doc->createElement('ns1:SupplementInfo');
$supplementInfo->setAttribute('suppId', 16);
$supplementInfo->setAttribute('supTotalPrice', 0.00);
$supplementInfo->setAttribute('suppType', 4);

$supAgeGroup = $doc->createElement( 'ns1:SupAgeGroup' );
$supAges = $doc->createElement( 'ns1:SuppAges' );
$supAges->setAttribute( 'suppFrom', 1 );
$supAges->setAttribute( 'suppTo', 7 );
$supAges->setAttribute( 'suppQuantity', 1 );
$supAges->setAttribute( 'suppPrice', 40.00 );

$supAgeGroup->appendChild( $supAges );
$supplementInfo->appendChild( $supAgeGroup );


$root->appendChild( $supplementInfo );
$soapXml= $doc->saveXML( $root );

echo "<pre>";
print_r( htmlspecialchars( $soapXml) );
echo "</pre>" ;