我在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
答案 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的。