Php SoapVar - 删除<soap-enc:struct> </soap-enc:struct>

时间:2014-01-27 11:38:27

标签: php xml soap

我在PHP中使用SoapVar创建的xml存在一些问题。

我需要像这样创建一个xml:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<SOAP-ENV:Header>
...
<ns2:Items>
    <ns2:OrderItem> 
        <ns2:ArticleID>242</ns2:ArticleID>
        <ns2:Properties/>
        <ns2:Quantity>1</ns2:Quantity>
    </ns2:OrderItem>
    <ns2:OrderItem> 
        <ns2:ArticleID>1256</ns2:ArticleID>
        <ns2:Properties/>
        <ns2:Quantity>1</ns2:Quantity>
    </ns2:OrderItem>
</ns2:Items>

但是当我使用SoapVar用这段代码创建我的节点时:

// multiple articles
$orderItems = array();
foreach ($order->getArticles() as $article) {
    $art = new stdClass();
    $art->$nsArticleID = $article->getArticleID();
    $art->$nsProperties = $article->getArticleProperty;
    $art->$nsQuantity = 1;
    $art = new SoapVar($art, SOAP_ENC_OBJECT);                
    $orderItems[] = $art;
    }
    $xml->$nsRequest->$nsItems = $orderItems;

我得到了这个XML:

<ns2:Items>
   <SOAP-ENC:Struct>
       <ns2:ArticleID>242</ns2:ArticleID>
       <ns2:Properties/>
       <ns2:Quantity>1</ns2:Quantity>
   </SOAP-ENC:Struct>
   <SOAP-ENC:Struct>
        <ns2:ArticleID>1256</ns2:ArticleID>
        <ns2:Properties/>
        <ns2:Quantity>1</ns2:Quantity>
   </SOAP-ENC:Struct>
</ns2:Items>

如何将SOAP-ENC:Struct标记更改为ns2:OrderItem

1 个答案:

答案 0 :(得分:0)

简答:将SoapVar的第三个参数设置为类的名称

答案很长:

创建一个容器类OrderItem(我在这里使用第一个大写字母的编码风格,但这不是一个好习惯):

class OrderItem
{
   /**
    * @var int
   */
   public $ArticleID;

   /**
    * I use a string just for test purpose
    * @var string
   */
   public $Properties;

   /**
    * @var int
   */
   public $Quantity;
}

...
$art = new SoapVar($art, SOAP_ENC_OBJECT, "OrderItem");
...

在没有设置第三个参数的情况下,php Soap实现不知道该对象应该如何命名。

我发现你并不需要一个容器。足以将SoapVar的第三个参数设置为所需的名称,例如, OrderItem的。