PHP: xmlattribute клиента мыла

Я пытаюсь использовать клиент мыла php.

Но XML-код SOAP должен содержать атрибут XML, такой как «opCode=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>

Может ли кто-нибудь сказать мне правильный синтаксис?


person GreenRover    schedule 07.05.2015    source источник
comment
Почему вы хотите запросить этот массив. Вы можете напрямую вызывать API на основе SOAP с помощью CURL   -  person Lalit Sharma    schedule 07.05.2015
comment
Почему я должен создавать xml самостоятельно? Мне кажется, что использование обработчика мыла php намного чище и проще. В противном случае мне придется создавать обработку ошибок (Exception) и все это самостоятельно.   -  person GreenRover    schedule 07.05.2015
comment
Если у вас есть необработанный xml, вы можете напрямую опубликовать его с помощью curl. нет необходимости использовать функцию мыльного запроса   -  person Lalit Sharma    schedule 07.05.2015
comment
Хорошо, это было бы запасным решением, но я все же предпочитаю использовать SoapClient.   -  person GreenRover    schedule 07.05.2015


Ответы (1)


Все эти вещи с подчеркиванием, которые я нашел в Интернете, не работают.

Единственное рабочее решение, которое я нашел, это:

$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
                )
            ),
        ),
    ));
person GreenRover    schedule 09.05.2015