gpt4 book ai didi

php - 无法使用 SimpleXML 解析 Soap 响应

转载 作者:可可西里 更新时间:2023-10-31 23:33:47 27 4
gpt4 key购买 nike

我正在使用 native soapclient() 来调用 WSDL,但我无法使用 simplexml 来解析结果。我一直收到错误消息:

Warning: simplexml_load_string() [function.simplexml-load-string]: 
Entity: line 1: parser error : Extra content at the end of the document

这看起来不像是命名空间问题,我已经尝试使用网站其他地方提到的补丁来从输入字符串中删除冒号。

编辑:

谢谢,戈登

是的,你是对的。服务器是一个使用数据集的 Microsoft 站点。

如果我将 trace 设置为 true 声明 soap 客户端:

$soapClient = new soapclient($this->wsdlUrl,array('trace'=>true));

然后从响应中检索原始 XML:

$soapResult = $soapClient->GetScheduledSectors();
$responseXml = $soapClient->__getLastResponse();
$xml = simplexml_load_string($responseXml, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");

然后我得到:

SimpleXMLElement Object
(
[Body] => SimpleXMLElement Object
(
)
)

响应 XML header 和第一个标记如下所示:

<?xml version='1.0'?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<soap:Body>

<GetScheduledSectorsResponse xmlns="https://www.kulula.com/k3api/">

<GetScheduledSectorsResult msdata:SchemaSerializationMode="ExcludeSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

<xs:schema id="dsFlight" targetNamespace="http://tempuri.org/dsFlight.xsd" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:mstns="http://tempuri.org/dsFlight.xsd" xmlns="http://tempuri.org/dsFlight.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">

<xs:element name="dsFlight" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:ExecutionTime="1140">

<xs:complexType>

<xs:choice minOccurs="0" maxOccurs="unbounded"/>

</xs:complexType>

</xs:element>

</xs:schema>

<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">

<dsFlight xmlns="http://tempuri.org/dsFlight.xsd">

<FlightSector diffgr:id="FlightSector1" msdata:rowOrder="0">

<FlightSectorId>1</FlightSectorId>

<FlightSectorName>JNBCPT</FlightSectorName>

<FromAirport>O.R. Tambo (Jo'burg)</FromAirport>

<ToAirport>Cape Town</ToAirport>

<DepartureAirportId>1</DepartureAirportId>

<ArrivalAirportId>2</ArrivalAirportId>

<AirlineCode>BA</AirlineCode>

<Ordernumber>100</Ordernumber>

<FlightZoneId>1</FlightZoneId>

<DepartureCountryCode>ZA</DepartureCountryCode>

<DepartureContinentCode>AF</DepartureContinentCode>

</FlightSector>

我还尝试注册了以下命名空间:

$xml = simplexml_load_string($this->responseXml, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
$xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance');
$xml->registerXPathNamespace('xsd', 'http://www.w3.org/2001/XMLSchema');
$xml->registerXPathNamespace('diffgr', 'urn:schemas-microsoft-com:xml-diffgram-v1');
$xml->registerXPathNamespace('mstns', 'http://tempuri.org/dsFlight.xsd');
$xml->registerXPathNamespace('msprop', 'urn:schemas-microsoft-com:xml-msprop');

但在$xml中还是得到一个空对象

最佳答案

您可以尝试 DOMDocument 而不是 simpleXML,因为在我过去的使用中它似乎更容错。虽然没有那么快。

但是,当我需要解析 SOAP 时,我引用了 How to parse SOAP XML?并找到了有关 PHP 5 native Soap 客户端的优秀信息。

关于php - 无法使用 SimpleXML 解析 Soap 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9274902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com