PHP cURL 响应作为 XML 显示为纯字符串



如果我在浏览器上运行此链接,我会得到正确的XML格式响应:http://old.lb.lt/webservices/FxRates/FxRates.asmx/getCurrentFxRates?tp=EU

现在,如果我使用 cURL 对同一链接运行 POST 请求,并且当我转储响应时,我只会得到一个字符串。如果我使

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

然后响应显示在我的浏览器中,没有XML标签,但是如果我检查页面,我会看到有所有的XML标签并且看起来不错。

我该怎么做才能将所有 XML 标记解析为变量的有效响应?

此外,我将响应设置为:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded'
));

如此处的文档中所述 http://www.lb.lt/webservices/FxRates/FxRates.asmx?op=getCurrentFxRates(在页面的最底部)。

您可以使用simplexml_load_string()将字符串转换为XML对象:

$xmlstring = curl_exec($ch); 
$xml = simplexml_load_string($xmlstring);
foreach ($xml->FxRate as $rate) {
echo (string)$rate->Tp ;
}

当我转储响应时,我只得到一个字符串

是的,通过HTTP输出的任何内容都是一串字节。在这种情况下,该字符串是 XML 文档的内容。

然后响应显示在我的浏览器中,没有XML标签

这是因为PHP默认告诉浏览器将其输出解释为HTML;当浏览器将XML解释为HTML时,它只是忽略所有无法识别的标签,并输出它们之间的任何内容。

您可以使用htmlspecialchars()对 HTML 文档中的 XML 进行编码,或者通过设置内容类型标头来指示浏览器将其解释为 XML:

header('Content-Type: text/xml');

如果我检查页面,我看到有所有的XML标签,它看起来不错。

浏览器中的"查看源代码"视图或 DOM 检查器仍将内容解释为 HTML,但旨在显示所有标签(可识别的标签,如<div><p>,以及无法识别的标签,如<some-xml-tag>)。

我该怎么做才能将所有 XML 标记解析为变量的有效响应?

嗯,这取决于你想要它使用哪种变量;如果我们想从字面上理解这个问题,你拥有的字符串是一个已经包含 XML 的变量。

很可能你正在寻找的是一个XML解析器,它允许你从XML中获取一些数据,并在PHP中使用它做一些事情,最简单的解析器被恰当地称为SimpleXML,你可以在PHP手册中找到使用它的基本示例。

(请不要试图将整个XML文档转换为数组 - XML的结构不适合简单的数组,而SimpleXML旨在很好地为您应对这种复杂性;一旦您习惯了它,它就会做得很好。

此外,我将响应设置为:

curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/x-www-form-urlencoded' ));

这不是设置与响应有关的任何内容;它向API发送HTTP标头,指定您发送的数据格式;具体来说,您以浏览器提交HTML表单时使用的格式发送它。

相关内容

  • 没有找到相关文章

最新更新