PHP -> Curl -> Soap Response (Получить данные из тегов XML) - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть ответ Curl с данными Soap XML.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/><SOAP-ENV:Body><ns2:GetAccountMovementsResponseIo xmlns:ns2="http://www.mygemini.com/schemas/mygemini">
<ns2:result>
    <ns2:pager>
        <ns2:pageIndex>0</ns2:pageIndex>
        <ns2:pageSize>700</ns2:pageSize>
    </ns2:pager>
    <ns2:totalCount>3</ns2:totalCount>
</ns2:result>
<ns2:accountMovement>
    <ns2:movementId>002147575330.2</ns2:movementId>
    <ns2:paymentId>95694091</ns2:paymentId>
    <ns2:externalPaymentId>2147575330</ns2:externalPaymentId>
    <ns2:debitCredit>1</ns2:debitCredit>
    <ns2:valueDate>2018-12-13T00:00:00+04:00</ns2:valueDate>
    <ns2:description>გადარიცხვა პირად ანგარიშზე</ns2:description>
    <ns2:amount>
        <ns2:amount>10000</ns2:amount>
        <ns2:currency>GEL</ns2:currency>
    </ns2:amount>
    <ns2:accountNumber>GE44TB7142536020100005</ns2:accountNumber>
    <ns2:accountName>კლიენტი:1425</ns2:accountName>
    <ns2:additionalInformation>კლიენტი:1425, 123456786, TBCBGE22, GE17TB7142536020100006</ns2:additionalInformation>
    <ns2:documentDate>2018-12-13T00:00:00+04:00</ns2:documentDate>
    <ns2:documentNumber>1544698824</ns2:documentNumber>
    <ns2:partnerAccountNumber>GE17TB7142536020100006</ns2:partnerAccountNumber>
    <ns2:partnerName>კლიენტი:1425, 123456786</ns2:partnerName>
    <ns2:partnerTaxCode>123456786</ns2:partnerTaxCode>
    <ns2:partnerBankCode>TBCBGE22</ns2:partnerBankCode>
    <ns2:partnerBank>სს  თიბისი  ბანკი</ns2:partnerBank>
    <ns2:taxpayerCode>123456786</ns2:taxpayerCode>
    <ns2:taxpayerName>კლიენტი:1425, 123456786</ns2:taxpayerName>
    <ns2:operationCode>GII</ns2:operationCode>
    <ns2:partnerDocumentType>0</ns2:partnerDocumentType>
    <ns2:statusCode>3</ns2:statusCode>
    <ns2:transactionType>1</ns2:transactionType>
</ns2:accountMovement>
<ns2:accountMovement>
    <ns2:movementId>002147575330.1</ns2:movementId>
    <ns2:paymentId>95694091</ns2:paymentId>
    <ns2:externalPaymentId>2147575330</ns2:externalPaymentId>
    <ns2:debitCredit>0</ns2:debitCredit>
    <ns2:valueDate>2018-12-13T00:00:00+04:00</ns2:valueDate>
    <ns2:description>გადარიცხვა პირად ანგარიშზე</ns2:description>
    <ns2:amount>
        <ns2:amount>10000</ns2:amount>
        <ns2:currency>GEL</ns2:currency>
    </ns2:amount>
    <ns2:accountNumber>GE17TB7142536020100006</ns2:accountNumber>
    <ns2:accountName>კლიენტი:1425, 123456786</ns2:accountName>
    <ns2:additionalInformation>კლიენტი:1425, TBCBGE22, GE44TB7142536020100005</ns2:additionalInformation>
    <ns2:documentDate>2018-12-13T00:00:00+04:00</ns2:documentDate>
    <ns2:documentNumber>1544698824</ns2:documentNumber>
    <ns2:partnerAccountNumber>GE44TB7142536020100005</ns2:partnerAccountNumber>
    <ns2:partnerName>კლიენტი:1425</ns2:partnerName>
    <ns2:partnerTaxCode>123456786</ns2:partnerTaxCode>
    <ns2:partnerBankCode>TBCBGE22</ns2:partnerBankCode>
    <ns2:partnerBank>სს  თიბისი  ბანკი</ns2:partnerBank>
    <ns2:taxpayerCode>123456786</ns2:taxpayerCode>
    <ns2:taxpayerName>კლიენტი:1425, 123456786</ns2:taxpayerName>
    <ns2:operationCode>GII</ns2:operationCode>
    <ns2:partnerDocumentType>0</ns2:partnerDocumentType>
    <ns2:statusCode>3</ns2:statusCode>
    <ns2:transactionType>1</ns2:transactionType></ns2:accountMovement>
    <ns2:accountMovement><ns2:movementId>002147575329.2</ns2:movementId>
    <ns2:externalPaymentId>2147575329</ns2:externalPaymentId>
    <ns2:debitCredit>1</ns2:debitCredit>
    <ns2:valueDate>2018-12-13T00:00:00+04:00</ns2:valueDate>
    <ns2:description>ანგარიშზე თანხის შეტანა</ns2:description><ns2:amount>
    <ns2:amount>100000</ns2:amount><ns2:currency>GEL</ns2:currency></ns2:amount>
    <ns2:accountNumber>GE17TB7142536020100006</ns2:accountNumber>
    <ns2:accountName>კლიენტი:1425</ns2:accountName>
    <ns2:additionalInformation>სახელი:3928462 გვარი3928462</ns2:additionalInformation>
    <ns2:documentDate>2018-12-13T00:00:00+04:00</ns2:documentDate>
    <ns2:documentNumber>63946130</ns2:documentNumber>
    <ns2:partnerAccountNumber>GE78TB0000000000060000</ns2:partnerAccountNumber>
    <ns2:partnerName>სახელი:3928462 გვარი3928462</ns2:partnerName>
    <ns2:partnerTaxCode>00000000000</ns2:partnerTaxCode>
    <ns2:partnerBankCode>TBCBGE22</ns2:partnerBankCode><ns2:partnerBank>ს.ს. „თიბისი ბანკი”</ns2:partnerBank>
    <ns2:operationCode>01</ns2:operationCode>
    <ns2:partnerPersonalNumber>00000000000</ns2:partnerPersonalNumber>
    <ns2:partnerDocumentType>6</ns2:partnerDocumentType>
    <ns2:partnerDocumentNumber>DC102086</ns2:partnerDocumentNumber>
    <ns2:statusCode>3</ns2:statusCode>
    <ns2:transactionType>20</ns2:transactionType>
</ns2:accountMovement>
</ns2:GetAccountMovementsResponseIo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Я хотел бы получать данные внутри тегов один за другим <ns2:paymentId>, <ns2:externalPaymentId>, <ns2:debitCredit> и т. Д.

Пожалуйста, обратите внимание, что это пустышкаданные выписки из банка, а в реальной жизни ответы имеют несколько тегов с одинаковыми именами на каждую транзакцию.Например, если будет 11 транзакций, будет 11 <ns2:paymentId> тегов, и мне нужно получать данные одну за другой.

1 Ответ

0 голосов
/ 19 декабря 2018

Используя SimpleXML, вы можете намного проще читать код и данные.Единственное, что вам нужно уважать пространства имен.Поэтому сначала зарегистрируйте пространство имен ns2, чтобы затем можно было извлечь элементы <ns2:accountMovement>.Цикл над ними, но для доступа к дочерним элементам в пространстве имен используйте children("http://www.mygemini.com/schemas/mygemini"), чтобы получить их в переменную $data, тогда каждый доступ осуществляется через это (то есть $data->paymentId) ...

$xml = simplexml_load_string($xmlContent);
$xml->registerXPathNamespace("ns2", "http://www.mygemini.com/schemas/mygemini");
$movements = $xml->xpath("//ns2:GetAccountMovementsResponseIo/ns2:accountMovement");
foreach ( $movements as $accMove ) {
    $data = $accMove->children("http://www.mygemini.com/schemas/mygemini");
    echo "paymentId ->".$data->paymentId.PHP_EOL;
    echo "externalPaymentId ->".$data->externalPaymentId.PHP_EOL;
    echo "debitCredit ->".$data->debitCredit.PHP_EOL;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...