Самый эффективный способ анализа XML-данных из ответа PHP SOAP с SimpleXML? - PullRequest
0 голосов
/ 15 марта 2012

У меня есть набор данных XML, который я использую через SOAP через PHP. Я пытаюсь разобрать значения из XML, чтобы я мог использовать эти значения для заполнения в базе данных. Я долго искал, чтобы найти лучший способ сделать это. Вот пример некоторого xml:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
<PaymentNotification xmlns="http://apilistener.envoyservices.com">
  <payment>
    <uniqueReference>ESDEUR11039872</uniqueReference>      
    <epacsReference>74348dc0-cbf0-df11-b725-001ec9e61285</epacsReference>
    <postingDate>2010-11-15T15:19:45</postingDate>
    <bankCurrency>EUR</bankCurrency>
    <bankAmount>1.00</bankAmount>
    <appliedCurrency>EUR</appliedCurrency>
    <appliedAmount>1.00</appliedAmount>
    <countryCode>ES</countryCode>
    <bankInformation>Sean Wood</bankInformation>
  <merchantReference>ESDEUR11039872</merchantReference>
   </payment>
    </PaymentNotification>
  </soap:Body>
</soap:Envelope>

Используя SimpleXMl и namespaces / xpath, у меня есть доступ к тегу и значениям внутри. Однако единственный способ, которым я могу разобрать значения, - это циклически проходить по каждому элементу в узле, проверять его имя, и, если оно совпадает с моим сравнением строк, назначать его переменной массива. Я должен разобрать несколько платежей. Например:

//all payments
foreach($data->children() as $child) {
   //one payment
   foreach($child->children() as $subChild) {

     switch($subChild->getName()) {
        case "bankCurrency":
           $newPayment['bankCurrency'] = (string)$subChild;
       break;
    case "bankPayment":
       $newPayment['bankAmount'] = (string)$subChild;
       break;
    }
  }
}

Это лучший способ сделать это? Или я совсем где-то пропустил? Спасибо!

1 Ответ

0 голосов
/ 16 марта 2012

После долгих проб и ошибок я понял, что на самом деле могу гораздо проще получить доступ к элементам XML.Из начального цикла я могу получить доступ к элементам напрямую, используя $ child-> bankCurrency.Нет необходимости заходить во внутренний цикл и выполнять любой из этих разборов.Я наконец оборачиваюсь вокруг этого PHP-материала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...