如何使用 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-&gt;StudentGetInformationResult-&gt;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 变量?

使用命名空间从 XML 响应中获取 PHP 数组

PLSQL PHP:如何将大型 xml 数据从 PLSQL 函数获取到 PHP

使用 REST XML Web 服务