Как конвертировать XML в JSON - PullRequest
1 голос
/ 03 февраля 2020

Как мне преобразовать это XML в JSON

<?xml version="1.0" encoding="UTF-8"?>
<ns0:COMMAND xmlns:ns0="http://www.tibco.com/schemas/pinless/PINLESS.core/C2STransferBillPayment/Schema.xsd9">
    <ns0:TYPE>EXRCTRFRESP</ns0:TYPE>
    <ns0:TXNSTATUS>200</ns0:TXNSTATUS>
    <ns0:DATE>02/02/20</ns0:DATE>
    <ns0:EXTREFNUM>20200202192308729Af9cWtvg3W</ns0:EXTREFNUM>
    <ns0:TXNID>R200202.1923.250008</ns0:TXNID>
    <ns0:MESSAGE>R200202.1923.250008 confirmed. </ns0:MESSAGE>
</ns0:COMMAND>

Я пытался сделать это, но вернуть пустой массив.

$string = '<?xml version="1.0" encoding="UTF-8"?><ns0:COMMAND xmlns:ns0="http://www.tibco.com/schemas/pinless/PINLESS.core/C2STransferBillPayment/Schema.xsd9"><ns0:TYPE>EXRCTRFRESP</ns0:TYPE><ns0:TXNSTATUS>200</ns0:TXNSTATUS><ns0:DATE>02/02/20</ns0:DATE><ns0:EXTREFNUM>20200202192308729Af9cWtvg3W</ns0:EXTREFNUM><ns0:TXNID>R200202.1923.250008</ns0:TXNID><ns0:MESSAGE>R200202.1923.250008 confirmed.  </ns0:MESSAGE></ns0:COMMAND>';

$xmlObject = simplexml_load_string($string);

$jsonString = json_encode($xmlObject);

$jsonArray = json_decode($jsonString, true);

var_dump($jsonArray);

Кто-нибудь поможет?

1 Ответ

0 голосов
/ 03 февраля 2020

Прежде всего, пожалуйста, проверьте встроенную функцию PHP simplexml_load_string в do c, чтобы увидеть, какие параметры принимает эта функция и почему? Поскольку ваша строка xml использует пространство имен, вы должны предоставить пространство имен в качестве 4-го аргумента. Посмотрите на код ниже:

<?php

$xml_string = <<<EOR
<?xml version="1.0" encoding="UTF-8"?>
<ns0:COMMAND xmlns:ns0="http://www.tibco.com/schemas/pinless/PINLESS.core/C2STransferBillPayment/Schema.xsd9">
    <ns0:TYPE>EXRCTRFRESP</ns0:TYPE>
    <ns0:TXNSTATUS>200</ns0:TXNSTATUS>
    <ns0:DATE>02/02/20</ns0:DATE>
    <ns0:EXTREFNUM>20200202192308729Af9cWtvg3W</ns0:EXTREFNUM>
    <ns0:TXNID>R200202.1923.250008</ns0:TXNID>
    <ns0:MESSAGE>R200202.1923.250008 confirmed. </ns0:MESSAGE>
</ns0:COMMAND>
EOR;

$xml = simplexml_load_string($xml_string, "SimpleXMLElement", LIBXML_NOCDATA, 'ns0', true);
$json = json_encode($xml);
$array = json_decode($json, true);

echo '<pre>';
print_r($array);

// Outputs

Array
(
    [TYPE] => EXRCTRFRESP
    [TXNSTATUS] => 200
    [DATE] => 02/02/20
    [EXTREFNUM] => 20200202192308729Af9cWtvg3W
    [TXNID] => R200202.1923.250008
    [MESSAGE] => R200202.1923.250008 confirmed. 
)

Кстати, вы можете сделать это, используя файл xml. В этом случае вам нужно использовать эту функцию simplexml_load_file() таким же образом.

<?php

$xml_file = 'your_xml_file_location.xml';
$xml = simplexml_load_file($xml_file, "SimpleXMLElement", LIBXML_NOCDATA, 'ns0', true);
...