将 xml 从 URL 获取到变量中
Posted
技术标签:
【中文标题】将 xml 从 URL 获取到变量中【英文标题】:getting xml from URL into variable 【发布时间】:2012-12-15 20:50:10 【问题描述】:我正在尝试从 url 获取 xml 提要
http://api.eve-central.com/api/marketstat?typeid=1230®ionlimit=10000002
但似乎失败得很惨。我试过了
new SimpleXMLElement
,
file_get_contents
和
http_get
然而,当我使用echo
或print_r
时,这些似乎都没有回应一个不错的 XML 提要。最终目标是最终解析这些数据,但将其放入变量中肯定是一个不错的开始。
我在下面附上了我的代码。这包含在一个循环中,$typeID
实际上给出了正确的 ID,如上所示
$url = 'http://api.eve-central.com/api/marketstat?typeid='.$typeID.'®ionlimit=10000002';
echo $url."<br />";
$xml = new SimpleXMLElement($url);
print_r($xml);
我应该说明我看到的另一件奇怪的事情是,当我回显 $url 时,我得到了
http://api.eve-central.com/api/marketstat?typeid=1230®ionlimit=10000002
&reg
是注册商标符号。我不确定这是我的浏览器中的“功能”,还是我的代码中的“功能”
【问题讨论】:
您使用的是哪个浏览器?我问是因为我只是想知道注册商标符号的(附带问题)。 【参考方案1】:尝试以下方法:
<?php
$typeID = 1230;
// set feed URL
$url = 'http://api.eve-central.com/api/marketstat?typeid='.$typeID.'®ionlimit=10000002';
echo $url."<br />";
// read feed into SimpleXML object
$sxml = simplexml_load_file($url);
// then you can do
var_dump($sxml);
// And now you'll be able to call `$sxml->marketstat->type->buy->volume` as well as other properties.
echo $sxml->marketstat->type->buy->volume;
// And if you want to fetch multiple IDs:
foreach($sxml->marketstat->type as $type)
echo $type->buy->volume . "<br>";
?>
【讨论】:
我尝试了$volume = $sxml->buy->volume; echo $volume
但是没有返回任何东西,知道为什么吗?
@mhopkins321 首先确保定义了$typeID
,然后您应该调用:$sxml->marketstat->type->buy->volume
(已修复)
如果我的 url 是 http://api.eve-central.com/api/marketstat?typeid=1230&typeid=1231&regionlimit=10000002
对 php/xml 来说有点新(显然),其中会有两个不同的类型 id,在 -> 行中,id 会进入吗?
@mhopkins321 你不能传递两个 $typeID - 其中一个会超过另一个!
hmmm...这不是正常的 HTTP 行为...让我检查一下。【参考方案2】:
您需要从 URL 中获取数据才能生成 XML 对象。
$url = 'http://api.eve-central.com/api/marketstat?typeid='.$typeID.'®ionlimit=10000002';
$xml = new SimpleXMLElement(file_get_contents($url));
// pre tags to format nicely
echo '<pre>';
print_r($xml);
echo '</pre>';
【讨论】:
这会返回一些我不太熟悉的数据(尽管它可能是真正的原始 xml 的样子?)。如果想在 $xml->sell->average 处调用节点。我会将我的变量设置为什么?我尝试了$sell = $xml->sell->average
,但似乎没有用
抱歉,将var_dump
更改为print_r
会给您带来更友好的结果。要访问卖出平均值,您需要执行 $xml->marketstat->type->sell->average
以上是关于将 xml 从 URL 获取到变量中的主要内容,如果未能解决你的问题,请参考以下文章
如何从 url 获取 json 数据并将其保存到 const 变量 [TypeScript]