如何使用 PHP 从 Web 服务获取 XML 数据?
Posted
技术标签:
【中文标题】如何使用 PHP 从 Web 服务获取 XML 数据?【英文标题】:How do I get XML data from a web service using PHP? 【发布时间】:2012-04-20 02:22:12 【问题描述】:我需要访问 .NET Web 服务的响应,该服务以 XML 格式返回数据。 如何拆分返回的数据?例如,我想将数据解析成一些 php 变量:
$name = "Dupont";
$email = "charles.dupont@societe.com";
我一直在寻找如何做到这一点,但没有找到正确的方法。
我的脚本是:
$result = $client->StudentGetInformation($params_4)->StudentGetInformationResult;
echo "<p><pre>" . print_r($result, true) . "</pre></p>";
我页面中的回声是:
stdClass Object
(
[any] => 0Successful10371DupontCharlescharles.dupont@societe.com1234charles.dupont@societe.comfalsefr-FR1003FIRST FINANCE1778AAA Département
)
webservice响应格式为:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<StudentGetInformationResponse xmlns="http://tempuri.org/">
<StudentGetInformationResult>xml</StudentGetInformationResult>
</StudentGetInformationResponse>
</soap:Body>
</soap:Envelope>
我已经尝试过您的示例。但它不能满足我的需要。 我需要拆分返回的值。我想获取数据并将它们放入 PHP 变量中:
$name = "杜邦"; $email = "charles.dupont@societe.com"; 等等……
不幸的是,你的例子的回声给出了:
object(stdClass)#1 (1) ["StudentGetInformationResult"]=> object(stdClass)#11 (1) ["any"]=> string(561) "0Successful10371DupontCharlescharles.dupont@societe.com1234charles.dupont@societe.comfalsefr-FR1003FIRST FINANCE1778AAA Département"
【问题讨论】:
SoapClient
php.net/manual/en/class.soapclient.php 像魅力一样工作
谢谢...但是你知道我必须使用哪个类吗?
【参考方案1】:
您唯一需要的课程是SoapClient
。您可以在PHP Documentation 中使用很多示例。
例子:
try
$client = new SoapClient ( "some.aspx?wsdl" );
$result = $client->StudentGetInformation ( $params_4 );
$xml = simplexml_load_string($result->StudentGetInformationResult->any);
echo "<pre>" ;
foreach ($xml as $key => $value)
foreach($value as $ekey => $eValue)
print($ekey . " = " . $eValue . PHP_EOL);
catch ( SoapFault $fault )
trigger_error ( "SOAP Fault: (faultcode: $fault->faultcode, faultstring: $fault->faultstring)", E_USER_ERROR );
输出
Code = 0
Message = Successful
stud_id = 10373
lname = Dupont
fname = Charles
loginid = charles.dupont@societe.com
password = 1234
email = charles.dupont@societe.com
extid =
fdisable = false
culture = fr-FR
comp_id = 1003
comp_name = FIRST FINANCE
dept_id = 1778
dept_name = Certification CMF (Test web service)
udtf1 =
udtf2 =
udtf3 =
udtf4 =
udtf5 =
udtf6 =
udtf7 =
udtf8 =
udtf9 =
udtf10 =
Audiences =
【讨论】:
我必须等待 7 小时才能使用应答按钮! 我试过你的例子。但它不能满足我的需要。我需要拆分返回的值。我想获取数据并将它们放入 PHP 变量中: $name = "Dupont"; $email = "charles.dupont@societe.com";等等......不幸的是,你的例子的回声给出了:code
object(stdClass)#1 (1) ["StudentGetInformationResult"]=> object(stdClass)#11 (1) ["any"]=> string (561) "0Successful10371DupontCharlescharles.dupont@societe.com1234charles.dupont@societe.comfalsefr-FR1003FIRST FINANCE1778AAA Département" code
值在$result->StudentGetInformationResult->any
和你得到0Successful10371DupontCharlescharles.dupont@societe.com1234charles.dupont@societe.comfalsefr-FR1003FIRST FINANCE1778AAA Département
的格式看起来有点奇怪.. 你能把wasdl 链接让我自己试试吗??? @emb
$result->StudentGetInformationResult->any 的回显给出了字符串:0Successful10373DupontCharlescharles.dupont@societe.com1234charles.dupont@societe.comfalsefr-FR1003FIRST FINANCE1778Certification CMF。不幸的是,我不能给你 wsdl 网址。我仍在寻找一种方法来访问此字符串中给出的数据的每一部分。
如果这种代码可以工作,我会很高兴,但它不能......:$result->StudentGetInformationResult->any['email']以上是关于如何使用 PHP 从 Web 服务获取 XML 数据?的主要内容,如果未能解决你的问题,请参考以下文章
从 C# .NET Core(特别是 Workday)调用 Java Web 服务。如何在soap请求中获取xml属性
如何使用 Vuejs 前端框架使用 MySQL/PHP 从服务器获取数据
如何从 PHP 中获取远程 JSON 或 XML API 数据并将返回对象分配为 PHP 变量?