2015-05-07 55 views
1

我尝试使用php肥皂客户端。PHP:肥皂客户端xmlattribute

但SOAP XML需要包含类似的XML属性 “操作码= EQ” 这个例子:

 <ws:Query> 
     .... 
     <com:Properties> 
      <com:xx>yy</com:xx> 
      <com:ab>cc</com:ab> 
     </com:Properties> 
     <com:QueryCondition> 
      <com:CmpOp opCode="EQ"> 
       <com:Property>FolderName</com:Property> 
       <com:Value>AB028</com:Value> 
      </com:CmpOp> 
     </com:QueryCondition> 
    </ws:Query> 

我尝试使用此代码阅读:

$this->client = new SOAPClient(__DIR__ . '/WSDL.XML', array(
     'trace' => 1, 
     'exception' => 1 
    )); 

$this->client->query((object) array(
     // .. 
     'Properties' => (object) array(
      'xx' => 'yy', 
      'ab' => 'cc' 
     ), 
     'QueryCondition' => (object) array(
      'CmpOp' => (object) array(
       'opCode' => 'EQ', 
       '_' => (object) array(
        'Property' => 'FolderName', 
        'Value' => 'AB028', 
       ), 
      ), 
     ), 
    )); 

但这个结果在:

<com:QueryCondition> 
     <com:CmpOp> 
      <com:Property>FolderName</com:Property> 
      <com:Value>AB028</com:Value> 
     </com:CmpOp> 
     </com:_><com:opCode>EQ</com:opCode></com:_> 
    </com:QueryCondition> 

有人可以告诉我正确的语法吗?

+0

为什么要查询这个数组。您可以直接使用CURL调用基于SOAP的API –

+0

为什么我应该自己构建xml?它接缝mutch清洁剂和easyer为我使用PHP肥皂处理程序。否则必须建立错误处理(例外)和所有这些我自己的东西。 – GreenRover

+0

如果您有原始的xml,那么您可以直接使用curl进行发布。不需要使用soap查询功能 –

回答

1

所有这些东西都与我在互联网dosent工作中发现的下划线。

唯一可行的解​​决方案,我发现是:

$this->client->query((object) array(
     // .. 
     'Properties' => (object) array(
      'xx' => 'yy', 
      'ab' => 'cc' 
     ), 
     'QueryCondition' => (object) array(
      'CmpOp' => new SoapVar(
         '<CmpOp opCode="EQ">' . 
          '<Property>FolderName</Property>' . 
          '<Value>' . htmlspecialchars('AB028'). '</Value>' . 
         '</CmpOp>', 
        XSD_ANYXML 
       ) 
      ), 
     ), 
    ));