我有一个类似SOAP响应的XML:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:VizsgaHelyszinLekerdezValasz xmlns:ns2="...">
<MegyeKir>
<MegyeKir>id_1</MegyeKir>
<KirendeltsegNev>KirendeltsegNev_1</KirendeltsegNev>
<VizsgaHelyszin>
<Nev>Nev_1</Nev>
<VizsgaHelyszinKod>9020</VizsgaHelyszinKod>
<GyakorlatiVizsgaTipus>Bü</GyakorlatiVizsgaTipus>
<GyakorlatiVizsgaTipus>F</GyakorlatiVizsgaTipus>
</VizsgaHelyszin>
<VizsgaHelyszin>
<Nev>Nev2</Nev>
<VizsgaHelyszinKod>823020</VizsgaHelyszinKod>
<GyakorlatiVizsgaTipus>Jk</GyakorlatiVizsgaTipus>
</VizsgaHelyszin>
</MegyeKir>
<MegyeKir>
<MegyeKir>id_2</MegyeKir>
<KirendeltsegNev>KirendeltsegNev_2</KirendeltsegNev>
<VizsgaHelyszin>
<Nev>Nev_1</Nev>
<VizsgaHelyszinKod>9020</VizsgaHelyszinKod>
<GyakorlatiVizsgaTipus>Bü</GyakorlatiVizsgaTipus>
<GyakorlatiVizsgaTipus>F</GyakorlatiVizsgaTipus>
</VizsgaHelyszin>
<VizsgaHelyszin>
<Nev>Nev2</Nev>
<VizsgaHelyszinKod>823020</VizsgaHelyszinKod>
<GyakorlatiVizsgaTipus>Jk</GyakorlatiVizsgaTipus>
</VizsgaHelyszin>
</MegyeKir>
</ns2:VizsgaHelyszinLekerdezValasz>
</soap:Body>
</soap:Envelope>
我想通过以下方式从其中创建一个JSON对象:
$response_xml = new SimpleXMLElement($response);
$response_xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/');
$megyekir = $response_xml->xpath("//soap:Body//MegyeKir");
echo json_encode($megyekir);
问题:因为“ MegyeKir”节点在JSON输出中具有相同的“ MegyeKir”子节点,所以该子节点不在“ MegyeKir”下,而是在单独的键中:
0: {MegyeKir: "id_1", KirendeltsegNev: "KirendeltsegNev_1", VizsgaHelyszin: [,…]}
1: {0: "id_1"}
2: {MegyeKir: "id_2", KirendeltsegNev: "KirendeltsegNev_2",…}
3: {0: "id_2"}
如何跳过JSON数组中的这些元素?
非常感谢您的帮助!
与第二个//soap:Body//MegyeKir
一起使用//
指示XPath查找所有级别的所有元素。如果只需要主要元素,则应限制此。
由于<Body>
标签和您要使用的<MegyeKir>
之间只有一层,因此您应该使用/*/
,这两个标签之间只允许有一层...