gpt4 book ai didi

php - 使用 php 解析 SOAP XML 响应

转载 作者:行者123 更新时间:2023-12-02 17:00:54 24 4
gpt4 key购买 nike

我已经检查了多个示例和 w3Schools 教程,但我无法弄清楚 SOAP 响应的结构。我已经有 10 多年没有接触 php/xml 了,所以你可以认为我是一个初学者。

这是我收到的回复示例

<DataSet xmlns="http://www.multiprets.net/api">
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
<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="ProductSequence" type="xs:string" minOccurs="0"/>
<xs:element name="ProductCode" type="xs:string" minOccurs="0"/>
<xs:element name="ProdNameEn" type="xs:string" minOccurs="0"/>
<xs:element name="ProdNameFr" type="xs:string" minOccurs="0"/>
<xs:element name="ProductTerm" type="xs:double" minOccurs="0"/>
<xs:element name="UpdDate" type="xs:int" minOccurs="0"/>
<xs:element name="UpdTime" type="xs:int" minOccurs="0"/>
<xs:element name="Posted" type="xs:double" minOccurs="0"/>
<xs:element name="MPH" type="xs:double" minOccurs="0"/>
<xs:element name="CNT" type="xs:int" 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">
<ProductSequence>A1999</ProductSequence>
<ProductCode>VC</ProductCode>
<ProdNameEn>3 years variable</ProdNameEn>
<ProdNameFr>3 ans variable</ProdNameFr>
<ProductTerm>3</ProductTerm>
<UpdDate>20140529</UpdDate>
<UpdTime>134900</UpdTime>
<Posted>3</Posted>
<MPH>3</MPH>
<CNT>1</CNT>
</Table>
<Table diffgr:id="Table2" msdata:rowOrder="1">
<ProductSequence>A4000</ProductSequence>
<ProductCode>VC</ProductCode>
<ProdNameEn>5 years variable</ProdNameEn>
<ProdNameFr>5 ans variable</ProdNameFr>
<ProductTerm>5</ProductTerm>
<UpdDate>20141021</UpdDate>
<UpdTime>103100</UpdTime>
<Posted>3</Posted>
<MPH>2.3</MPH>
<CNT>1</CNT>
</Table>

我尝试获取 <MPH>标签来自table8使用此代码:

$client = new soapclient("http://www.multiprets.net/api/ws/services.asmx?wsdl"); 
$objectresult = $client->Recupere_meilleurs_Taux(array('Code_businessID'=> '**LoginString**','trace' => 1));
$resultat = simplexml_load_string($objectresult->Recupere_meilleurs_TauxResult->any);
foreach ($resultat->xpath('//Table[@id='Table8']') as $product){ echo $product->MPH."< br/ >"; }

无济于事,因为它没有返回任何结果。如果我从 xpath 中删除该属性并只保留 //Table我得到MPH从所有表中,所以我确信它具有属性 @id

预先感谢您抽出时间并分享您的知识。

最佳答案

这里的问题是您的属性具有 namespace ,因此您需要使用 SimpleXML XPath 注册 ns 并在 XPath 查询中使用它。

该元素为其后代声明两个命名空间:

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

要使用 SimpleXML 注册这些命名空间,您需要使用函数 registerXPathNamespace 。根据您正在执行的其他查询,您可能需要注册这两个命名空间。对于您的查询,您需要 urn:schemas-microsoft-com:xml-diffgram-v1 (diffgr) 命名空间;像这样注册:

$sxe = new SimpleXMLElement($your_xml_here);
$sxe->registerXPathNamespace('d', 'urn:schemas-microsoft-com:xml-diffgram-v1');

现在,您可以通过在 diffgr 命名空间中添加字母 d 前缀来访问任何元素或属性。以下是使用 id 为 Table1Table 元素的示例:

$tables = $sxe->xpath('//Table[@d:id="Table1"]');
foreach ($tables as $t) {
echo $t->ProductSequence . PHP_EOL;
}

输出:

A1999

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

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