(有人认为这个问题已经在这里得到了回答:PHP convert XML to JSON。但如下所示,我已经使用了simplexml_load_string,但没有成功)。
我尝试过多种方法将XML文件上的内容获取到JSON,但是XML文件很复杂,每次尝试都失败:
以下是我尝试过的方法:
$xml = \Zend\Xml2Json\Xml2Json::fromXml($data, false);
$doc = new \DOMDocument();
$doc->loadXML($data);
$x = $doc->documentElement;
$data = simplexml_load_string($data);上述方法的结果:
{"Success":"true","FailMessage":{},"Returned_DataSet":{}}我希望从结果中得到数据:
code: 47156
name: BARB
code: 1
name: GREATN
code: 89252
name: DERIN 以下是XML:
<?xml version="1.0" encoding="utf-8"?>
<DataSetResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="https://domain.co.uk/vehicles">
<Success>true</Success>
<FailMessage />
<Returned_DataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="CMan_Code" type="xs:int" minOccurs="0" />
<xs:element name="CMan_Name" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<Table diffgr:id="Table1" msdata:rowOrder="0">
<CMan_Code>47156</CMan_Code>
<CMan_Name>BARB </CMan_Name>
</Table>
<Table diffgr:id="Table2" msdata:rowOrder="1">
<CMan_Code>1</CMan_Code>
<CMan_Name>GREATN </CMan_Name>
</Table>
<Table diffgr:id="Table3" msdata:rowOrder="2">
<CMan_Code>89252</CMan_Code>
<CMan_Name>DERIN </CMan_Name>
</Table>
</NewDataSet>
</diffgr:diffgram>
</Returned_DataSet>
</DataSetResult>发布于 2019-08-14 16:21:38
对于更复杂的XML,从XML到JSON的泛型转换失败。XML具有附加的维度属性、同名重复节点或混合子节点。基于JSON的格式(如JsonML )是可能的,但这不是大多数人所希望或期望的JSON。
尝试另一种方法。使用Xpath (以及DOM或SimpleXML方法)从XML读取值。根据需要建立变量/数据结构。然后,可以将它们编码为JSON。
$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);
$items = [];
// iterate the Table nodes
foreach ($xpath->evaluate('//NewDataSet/Table') as $tableNode) {
$items[] = [
// read CMan_Code as string
'code' => trim($xpath->evaluate('string(CMan_Code)', $tableNode)),
// read CMan_Name as string
'name' => trim($xpath->evaluate('string(CMan_Name)', $tableNode))
];
}
var_dump($items);
// encode the array variable as JSON
var_dump(json_encode($items, JSON_PRETTY_PRINT));https://stackoverflow.com/questions/57494595
复制相似问题