【发布时间】:2023-03-09 12:55:01
【问题描述】:
我无法阅读 soap xml file 。我需要在数组中取partition 元素
这是我的服务响应:
<?php $xml = '<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetNetworkTopologyResponse xmlns="http://tempuri.org/">
<GetNetworkTopologyResult>
<Action Type="NetworkTopology" Result="OK">
<topology MinVSATID="1280" MaxVSATID="376">
<partition UID="1" NAME="System">
<lvg UID="3605" NAME="BS_TEST"/>
<lvg UID="4452" NAME="Colocated VATS BH"/>
<lvg UID="4530" NAME="SkyMesh_V40"/>
<lvg UID="4845" NAME="Bordernet_V45"/>
<lvg UID="4846" NAME="HarbourIT_V42"/>
<lvg UID="4847" NAME="AN_V43"/>
<lvg UID="4848" NAME="ANT_V44"/>
<lvg UID="4850" NAME="Clrnet_V41"/>
<lvg UID="4851" NAME="Oion_V46"/>
<lvg UID="14072" NAME="NBNCo_V47"/>
<lvg UID="15811" NAME="iit_V50"/>
<lvg UID="15812" NAME="IPStar_V49"/>
<lvg UID="17784" NAME="COLOCATED"/>
<lvg UID="20655" NAME="Bluemaxx_V52"/>
<lvg UID="21333" NAME="SkyMesh_V55"/>
<lvg UID="22782" NAME="Indigo_V54"/>
<lvg UID="24836" NAME="NBDemo_V51"/>
<wg UID="457" NAME="OB_1" LAPUADDRESS="256" HSP="65" HSPIP="2.17.1.1"/>
<wg UID="25397" NAME="OB_1_VoIP" LAPUADDRESS="260"/>
<wg UID="27795" NAME="OB_1_WE" LAPUADDRESS="258"/>
<sg UID="8881" NAME="OB_60_52_00_14" LAPUADDRESS="515" VERSION="6.5.00.14">
<dataTPL UID="25197" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="25195" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="25193" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="25191" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="17031" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="14168" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="8876" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="8874" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
</sg>
<sg UID="25396" NAME="OB_60_52_00_22" LAPUADDRESS="517" VERSION="6.2.00.22">
<dataTPL UID="27598" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="27596" NAME="DPS_12_6_52_00_22_VLAN_61-70"/>
<dataTPL UID="27594" NAME="DPS_11_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="27592" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="27590" NAME="DPS_12_6_52_00_22_VLAN_37-52"/>
<dataTPL UID="27588" NAME="DPS_12_6_52_00_22_VLAN_53-60"/>
<dataTPL UID="27586" NAME="DPS_11_6_52_00_22_VLAN_53-60"/>
<dataTPL UID="25395" NAME="DPS_11_6_52_00_22_VLAN_37-52"/>
</sg>
<sg UID="27796" NAME="OB_NS1_60_52_01_18" LAPUADDRESS="518" VERSION="6.1.01.18">
<dataTPL UID="27814" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="27812" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="27810" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="27808" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="27806" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="27804" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="27802" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
<dataTPL UID="27798" NAME="DPS_12_6_52_00_22_VLAN_71-80"/>
</sg>
</partition>
</topology>
</Action>
</GetNetworkTopologyResult>
</GetNetworkTopologyResponse>
</soap:Body>
</soap:Envelope>'
print_r($xml); // Return empty . no output
$xml->registerXPathNamespace('GetNetworkTopologyResponse', 'http://tempuri.org/');
foreach ($xml->xpath('//GetNetworkTopologyResponse:GetNetworkTopologyResult') as $item)
{
print_r($item);
}
请告诉我,我的代码有什么问题。我是 php 新手。
请帮忙。
谢谢
【问题讨论】:
-
你的致命错误仅仅意味着
$xml不是一个对象。使用print_r打印$xml的内容。此外,您使用了$soap_response,但在使用之前没有在任何地方定义它。 -
返回空。我做了
print_r($xml)。它返回空。请告诉我如何阅读。 -
你想读取文件还是响应是字符串?
-
是的。我编辑了我的问题。当
print_r($xml)时,它没有返回任何think.请指导我 -
@Piraba:我的答案工作正常,但您必须以不同的方式保存 xml 文件并单独保存 xml 代码。和以前一样