繁体   English   中英

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

[英]PHP cURL response as XML is shown as plain string

如果我在浏览器上运行此链接,则会得到正确的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解释为XML:

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

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

浏览器中的“查看源代码”视图或DOM Inspector仍将内容解释为HTML,但旨在显示所有标签(可识别的标签如<div><p>以及无法识别的<some-xml-tag><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表单时浏览器会使用的格式发送的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM