我在从特定节点获取数据时遇到问题。这是我的xml,保存在一个变量中。
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://some-url/soap/envelope/">
<soap-env:Header />
<soap-env:Body>
<n0:ZTRF_DATA_RFCResponse xmlns:n0="urn:sap-com:document:sap:rfc:functions">
<MESSAGE />
<MSGTYP />
<RETVAL>[{"matkl":"BIGFCYDIV","zprod":"BIG","ztyp":"FCY","zmod":"DIV","zprodt":"GANG","ztypt":"FANCY","zmodt":"DIVA","descr":"BICYCLE FCY DIVA"},{"matkl":"BIGFCYDLX","zprod":"BIG","ztyp":"FCY","zmod":"DLX","zprodt":"GANG","ztypt":"FANCY","zmodt":"DLX","descr":"BICYCLE FCY DELUX"},{"matkl":"BIGFCYECO","zprod":"BIG","ztyp":"FCY","zmod":"ECO","zprodt":"GANG","ztypt":"FANCY","zmodt":"ECO","descr":"BICYCLE FCY ECO"},{"matkl":"BIGFCYELT","zprod":"BIG","ztyp":"FCY","zmod":"ELT","zprodt":"GANG","ztypt":"FANCY","zmodt":"ELT","descr":"BICYCLE FCY ELITE"},{"matkl":"BIGFCYEXX","zprod":"BIG","ztyp":"FCY","zmod":"EXX","zprodt":"GANG","ztypt":"FANCY","zmodt":"EXX","descr":"BICYCLE FCY EX"},{"matkl":"BIGFCYNXT","zprod":"BIG","ztyp":"FCY","zmod":"NXT","zprodt":"GANG","ztypt":"FANCY","zmodt":"NXT","descr":"BICYCLE FCY NXT"},{"matkl":"BIGFCYORD","zprod":"BIG","ztyp":"FCY","zmod":"ORD","zprodt":"GANG","ztypt":"FANCY","zmodt":"ORD-FCY","descr":"BICYCLE FCY ORD"},{"matkl":"BIGFCYPRE","zprod":"BIG","ztyp":"FCY","zmod":"PRE","zprodt":"GANG","ztypt":"FANCY","zmodt":"PRE","descr":"BICYCLE FCY PREMIUM"},{"matkl":"BIGFCYSPD","zprod":"BIG","ztyp":"FCY","zmod":"SPD","zprodt":"GANG","ztypt":"FANCY","zmodt":"SPD","descr":"BICYCLE FCY SPEED"},{"matkl":"BIGFCYVXX","zprod":"BIG","ztyp":"FCY","zmod":"VXX","zprodt":"GANG","ztypt":"FANCY","zmodt":"VX1","descr":"BICYCLE FCY VX1"},{"matkl":"BIGFCYZXX","zprod":"BIG","ztyp":"FCY","zmod":"ZXX","zprodt":"GANG","ztypt":"FANCY","zmodt":"ZXX","descr":"BICYCLE FCY ZX"},{"matkl":"BIGKIDJNR","zprod":"BIG","ztyp":"KID","zmod":"JNR","zprodt":"GANG","ztypt":"KIDS","zmodt":"JNR","descr":"BICYCLE KID JUNIOR"},{"matkl":"BIGTNDFCY","zprod":"BIG","ztyp":"TND","zmod":"FCY","zprodt":"GANG","ztypt":"TENDER","zmodt":"FANCY","descr":"Tender - Fancy"},{"matkl":"BIHFCYHDT","zprod":"BIH","ztyp":"FCY","zmod":"HDT","zprodt":"HUGE","ztypt":"FANCY","zmodt":"HDT","descr":"BICYCLE HUGE HDT"},{"matkl":"BIHFCYHYB","zprod":"BIH","ztyp":"FCY","zmod":"HYB","zprodt":"HUGE","ztypt":"FANCY","zmodt":"HYB","descr":"BICYCLE HUGE HYB"},{"matkl":"BIHFCYLDY","zprod":"BIH","ztyp":"FCY","zmod":"LDY","zprodt":"HUGE","ztypt":"FANCY","zmodt":"LADY","descr":"BICYCLE HUGE LADY"},{"matkl":"BIHFCYSHK","zprod":"BIH","ztyp":"FCY","zmod":"SHK","zprodt":"HUGE","ztypt":"FANCY","zmodt":"SHK","descr":"BICYCLE HUGE SHK"},{"matkl":"BIHKIDJNR","zprod":"BIH","ztyp":"KID","zmod":"JNR","zprodt":"HUGE","ztypt":"KIDS","zmodt":"JNR","descr":"BICYCLE HUGE KID"},{"matkl":"BIKSTDDXX","zprod":"BIK","ztyp":"STD","zmod":"DXX","zprodt":"SKB","ztypt":"STANDARD","zmodt":"DXX","descr":"BICYCLE STD DX"},{"matkl":"BIKSTDORD","zprod":"BIK","ztyp":"STD","zmod":"OR1","zprodt":"SKB","ztypt":"STANDARD","zmodt":"ORD-STD","descr":"BICYCLE STD ORD"},{"matkl":"BIKSTDPXT","zprod":"BIK","ztyp":"STD","zmod":"PXT","zprodt":"SKB","ztypt":"STANDARD","zmodt":"PXT","descr":"BICYCLE STD PXT"},{"matkl":"BIKTN1STD","zprod":"BIK","ztyp":"TN1","zmod":"STD","zprodt":"SKB","ztypt":"TENDER-2","zmodt":"STANDARD","descr":"Tender-2"},{"matkl":"BIKTNDSTD","zprod":"BIK","ztyp":"TND","zmod":"STD","zprodt":"SKB","ztypt":"TENDER-1","zmodt":"STANDARD","descr":"Tender-1"},{"matkl":"BISFCYORD","zprod":"BIS","ztyp":"FCY","zmod":"ORD","zprodt":"SMART","ztypt":"FANCY","zmodt":"SMART-ORD","descr":"BICYCLE FCY ORD"},{"matkl":"BISKIDJNR","zprod":"BIS","ztyp":"KID","zmod":"JNR","zprodt":"SMART","ztypt":"KIDS","zmodt":"JNR","descr":"BICYCLE KID JUNIOR"},{"matkl":"BISSTDORD","zprod":"BIS","ztyp":"STD","zmod":"ORD","zprodt":"SMART","ztypt":"STANDARD","zmodt":"ORD","descr":"BICYCLE STD ORD"}]</RETVAL>
</n0:ZTRF_DATA_RFCResponse>
</soap-env:Body>
</soap-env:Envelope>
以上数据保存在一个变量中:-
$xml = simplexml_load_string($xmlstring, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
echo "<pre>"; print_r($array); die;
有Node RETVAL我想从该节点获取所有json数据并将其转换为数组。我已经尝试了上面的代码,但是没有用。谁能帮助我解决这个问题,谢谢。。
答案 0 :(得分:0)
您需要获取包含JSON字符串的节点的值。我会使用DOMDocument和DOMXPath来做到这一点:
<?php
$xmlString = <<<END
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://some-url/soap/envelope/">
<soap-env:Header />
<soap-env:Body>
<n0:ZTRF_DATA_RFCResponse xmlns:n0="urn:sap-com:document:sap:rfc:functions">
<MESSAGE />
<MSGTYP />
<RETVAL>[{"matkl":"BIGFCYDIV","zprod":"BIG","ztyp":"FCY","zmod":"DIV","zprodt":"GANG","ztypt":"FANCY","zmodt":"DIVA","descr":"BICYCLE FCY DIVA"},{"matkl":"BIGFCYDLX","zprod":"BIG","ztyp":"FCY","zmod":"DLX","zprodt":"GANG","ztypt":"FANCY","zmodt":"DLX","descr":"BICYCLE FCY DELUX"},{"matkl":"BIGFCYECO","zprod":"BIG","ztyp":"FCY","zmod":"ECO","zprodt":"GANG","ztypt":"FANCY","zmodt":"ECO","descr":"BICYCLE FCY ECO"},{"matkl":"BIGFCYELT","zprod":"BIG","ztyp":"FCY","zmod":"ELT","zprodt":"GANG","ztypt":"FANCY","zmodt":"ELT","descr":"BICYCLE FCY ELITE"},{"matkl":"BIGFCYEXX","zprod":"BIG","ztyp":"FCY","zmod":"EXX","zprodt":"GANG","ztypt":"FANCY","zmodt":"EXX","descr":"BICYCLE FCY EX"},{"matkl":"BIGFCYNXT","zprod":"BIG","ztyp":"FCY","zmod":"NXT","zprodt":"GANG","ztypt":"FANCY","zmodt":"NXT","descr":"BICYCLE FCY NXT"},{"matkl":"BIGFCYORD","zprod":"BIG","ztyp":"FCY","zmod":"ORD","zprodt":"GANG","ztypt":"FANCY","zmodt":"ORD-FCY","descr":"BICYCLE FCY ORD"},{"matkl":"BIGFCYPRE","zprod":"BIG","ztyp":"FCY","zmod":"PRE","zprodt":"GANG","ztypt":"FANCY","zmodt":"PRE","descr":"BICYCLE FCY PREMIUM"},{"matkl":"BIGFCYSPD","zprod":"BIG","ztyp":"FCY","zmod":"SPD","zprodt":"GANG","ztypt":"FANCY","zmodt":"SPD","descr":"BICYCLE FCY SPEED"},{"matkl":"BIGFCYVXX","zprod":"BIG","ztyp":"FCY","zmod":"VXX","zprodt":"GANG","ztypt":"FANCY","zmodt":"VX1","descr":"BICYCLE FCY VX1"},{"matkl":"BIGFCYZXX","zprod":"BIG","ztyp":"FCY","zmod":"ZXX","zprodt":"GANG","ztypt":"FANCY","zmodt":"ZXX","descr":"BICYCLE FCY ZX"},{"matkl":"BIGKIDJNR","zprod":"BIG","ztyp":"KID","zmod":"JNR","zprodt":"GANG","ztypt":"KIDS","zmodt":"JNR","descr":"BICYCLE KID JUNIOR"},{"matkl":"BIGTNDFCY","zprod":"BIG","ztyp":"TND","zmod":"FCY","zprodt":"GANG","ztypt":"TENDER","zmodt":"FANCY","descr":"Tender - Fancy"},{"matkl":"BIHFCYHDT","zprod":"BIH","ztyp":"FCY","zmod":"HDT","zprodt":"HUGE","ztypt":"FANCY","zmodt":"HDT","descr":"BICYCLE HUGE HDT"},{"matkl":"BIHFCYHYB","zprod":"BIH","ztyp":"FCY","zmod":"HYB","zprodt":"HUGE","ztypt":"FANCY","zmodt":"HYB","descr":"BICYCLE HUGE HYB"},{"matkl":"BIHFCYLDY","zprod":"BIH","ztyp":"FCY","zmod":"LDY","zprodt":"HUGE","ztypt":"FANCY","zmodt":"LADY","descr":"BICYCLE HUGE LADY"},{"matkl":"BIHFCYSHK","zprod":"BIH","ztyp":"FCY","zmod":"SHK","zprodt":"HUGE","ztypt":"FANCY","zmodt":"SHK","descr":"BICYCLE HUGE SHK"},{"matkl":"BIHKIDJNR","zprod":"BIH","ztyp":"KID","zmod":"JNR","zprodt":"HUGE","ztypt":"KIDS","zmodt":"JNR","descr":"BICYCLE HUGE KID"},{"matkl":"BIKSTDDXX","zprod":"BIK","ztyp":"STD","zmod":"DXX","zprodt":"SKB","ztypt":"STANDARD","zmodt":"DXX","descr":"BICYCLE STD DX"},{"matkl":"BIKSTDORD","zprod":"BIK","ztyp":"STD","zmod":"OR1","zprodt":"SKB","ztypt":"STANDARD","zmodt":"ORD-STD","descr":"BICYCLE STD ORD"},{"matkl":"BIKSTDPXT","zprod":"BIK","ztyp":"STD","zmod":"PXT","zprodt":"SKB","ztypt":"STANDARD","zmodt":"PXT","descr":"BICYCLE STD PXT"},{"matkl":"BIKTN1STD","zprod":"BIK","ztyp":"TN1","zmod":"STD","zprodt":"SKB","ztypt":"TENDER-2","zmodt":"STANDARD","descr":"Tender-2"},{"matkl":"BIKTNDSTD","zprod":"BIK","ztyp":"TND","zmod":"STD","zprodt":"SKB","ztypt":"TENDER-1","zmodt":"STANDARD","descr":"Tender-1"},{"matkl":"BISFCYORD","zprod":"BIS","ztyp":"FCY","zmod":"ORD","zprodt":"SMART","ztypt":"FANCY","zmodt":"SMART-ORD","descr":"BICYCLE FCY ORD"},{"matkl":"BISKIDJNR","zprod":"BIS","ztyp":"KID","zmod":"JNR","zprodt":"SMART","ztypt":"KIDS","zmodt":"JNR","descr":"BICYCLE KID JUNIOR"},{"matkl":"BISSTDORD","zprod":"BIS","ztyp":"STD","zmod":"ORD","zprodt":"SMART","ztypt":"STANDARD","zmodt":"ORD","descr":"BICYCLE STD ORD"}]</RETVAL>
</n0:ZTRF_DATA_RFCResponse>
</soap-env:Body>
</soap-env:Envelope>
END;
//Create a new DOMDocument instance and load your XML string
$dom = new DOMDocument();
$dom->loadXML($xmlString);
//Create a new DOMXPath instance and query for your node
$xpath = new DOMXPath($dom);
$result = $xpath->query('//RETVAL');
//If you have a hit...
if(!empty($result))
{
//...your JSON will be the nodeValue, you can json_decode it
$json = $result[0]->nodeValue;
$array = json_decode($json,true);
//If the JSON was valid, and is an array, as you expect, go do something with it
if(is_array($array))
{
echo "<pre>"; print_r($array); die;
}
}