【发布时间】:2016-08-12 07:56:06
【问题描述】:
使用 $result = curl_exec($ch); 从服务器获取 xml 响应后 我想从 xml 响应中提取一些数据并将提取的数据构建为有效的 json 格式并将该 json 发送到 android 中的移动应用程序
这是我从我的服务器得到的。
<ENVELOPE>
<HEADER>
<VERSION>1</VERSION>
<STATUS>1</STATUS>
</HEADER>
<BODY>
<DESC>
<CMPINFO>
...
</CMPINFO>
</DESC>
<DATA>
<COLLECTION ISMSTDEPTYPE="Yes" MSTDEPTYPE="512">
<STOCKITEM NAME="Abc Test" RESERVEDNAME="">
<STOCKITEMNAME TYPE="String">Abc Test</STOCKITEMNAME>
<CLOSINGBALANCE TYPE="Quantity"> 102 Nos</CLOSINGBALANCE>
<OPENINGBALANCE TYPE="Quantity"> 500 Nos</OPENINGBALANCE>
<DEBITTOTALS TYPE="Quantity"> 418 Nos</DEBITTOTALS>
<CREDITTOTALS TYPE="Quantity"> 20 Nos</CREDITTOTALS>
<OPENINGVALUE TYPE="Amount">-1000000.00</OPENINGVALUE>
<CLOSINGVALUE TYPE="Amount">-366400.00</CLOSINGVALUE>
<OUTWARDVALUE TYPE="Amount">4180000.00</OUTWARDVALUE>
<INWARDVALUE TYPE="Amount">-2400.00</INWARDVALUE>
<BASICQTY TYPE="Quantity"></BASICQTY>
<OPENINGRATE TYPE="Rate">2000.00/Nos</OPENINGRATE>
<CLOSINGRATE TYPE="Rate">1927.69/Nos</CLOSINGRATE>
<TBALCLOSING TYPE="Amount">-366400.00</TBALCLOSING>
<TBALOPENING TYPE="Amount">-1000000.00</TBALOPENING>
<STKOPBALANCE TYPE="Quantity"> 500 Nos</STKOPBALANCE>
<STKCLBALANCE TYPE="Quantity"> 102 Nos</STKCLBALANCE>
<TBALDEBITS TYPE="Amount">-2400.00</TBALDEBITS>
<TBALCREDITS TYPE="Amount">4180000.00</TBALCREDITS>
<STKINQTY TYPE="Quantity"> 20 Nos</STKINQTY>
<STKOUTQTY TYPE="Quantity"> 418 Nos</STKOUTQTY>
<TBALNETTCREDITS TYPE="Amount">4180000.00</TBALNETTCREDITS>
</STOCKITEM>
<STOCKITEM NAME="Gas" RESERVEDNAME="">
<STOCKITEMNAME TYPE="String">Gas</STOCKITEMNAME>
<CLOSINGBALANCE TYPE="Quantity"></CLOSINGBALANCE>
<OPENINGBALANCE TYPE="Quantity"></OPENINGBALANCE>
<DEBITTOTALS TYPE="Quantity"></DEBITTOTALS>
<CREDITTOTALS TYPE="Quantity"></CREDITTOTALS>
<OPENINGVALUE TYPE="Amount">0.00</OPENINGVALUE>
<CLOSINGVALUE TYPE="Amount"></CLOSINGVALUE>
<OUTWARDVALUE TYPE="Amount"></OUTWARDVALUE>
<INWARDVALUE TYPE="Amount"></INWARDVALUE>
<BASICQTY TYPE="Quantity"></BASICQTY>
<OPENINGRATE TYPE="Rate"></OPENINGRATE>
<CLOSINGRATE TYPE="Rate"></CLOSINGRATE>
<TBALCLOSING TYPE="Amount"></TBALCLOSING>
<TBALOPENING TYPE="Amount">0.00</TBALOPENING>
<STKOPBALANCE TYPE="Quantity"></STKOPBALANCE>
<STKCLBALANCE TYPE="Quantity"></STKCLBALANCE>
<TBALDEBITS TYPE="Amount"></TBALDEBITS>
<TBALCREDITS TYPE="Amount"></TBALCREDITS>
<STKINQTY TYPE="Quantity"></STKINQTY>
<STKOUTQTY TYPE="Quantity"></STKOUTQTY>
<TBALNETTCREDITS TYPE="Amount"></TBALNETTCREDITS>
</STOCKITEM>
....
</COLLECTION>
</DATA>
</BODY>
</ENVELOPE>
这只是提供大量数据的示例。假设如果我只需要 STOCKITEMNAME、CLOSINGBALANCE、STKINQTY 等... json 文件中的标记值。这个值在数组中。我试过这样...
<?php
.
.
.
$retValue = curl_exec($ch);
curl_close($ch);
$oXML = simplexml_load_string($retValue );
//echo $sXML;
$hd = array();
foreach ($oXML as $s):
$hd[$s]=$s->DATA->COLLECTION->STOCKITEM;
endforeach;
//$response["error"] = FALSE;
$response["resp"] = $hd;
//echo $header;
echo json_encode($response);
?>
但这不起作用... 请帮帮我
【问题讨论】:
-
$oXML的返回数据是什么? -
@aldrin27 它将提供的 xml 作为 SimpleXMLElement 对象返回。它看起来只是 xml 响应,但采用对象格式..
-
我能看到这个物体吗?
-
@aldrin27 很大,不能在评论中粘贴 :(
-
@aldrin27 它是 SimpleXMLElement 对象 ( [HEADER]=> ([VERSION]=>1[STATUS]=>1)[BODY] =>([DESC]=>([CMPINFO] = >(0]=>))[DATA]=>([COLLECTION]=>([@attributes]=>Array()[STOCKITEM]=>Array([0]=>()[STOCKITEMNAME]=>Abc 测试[CLOSINGBALANCE]=>102 个....[TBALDEBITS]=>-2400.00[TBALCREDITS]=>4180000.00[STKINQTY]=>20 个[STKOUTQTY]=>418 个[TBALNETTCCREDITS]=>4180000.00))))))
标签: php arrays json xml xml-parsing