具有相同子节点名称的 SimpleXMLElement xpath 查询
SimpleXMLElement xpath query with same childnode names
我有一个 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>
<ElmeletiVizsgaTipus>Bü</ElmeletiVizsgaTipus>
<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>
之间只有一层,你应该使用 /*/
这两个标签之间只有一层......
$megyekir = $response_xml->xpath("//soap:Body/*/MegyeKir");
我有一个 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>
<ElmeletiVizsgaTipus>Bü</ElmeletiVizsgaTipus>
<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>
之间只有一层,你应该使用 /*/
这两个标签之间只有一层......
$megyekir = $response_xml->xpath("//soap:Body/*/MegyeKir");