【发布时间】:2010-10-15 09:38:14
【问题描述】:
大家好。我正在尝试解析 xml 文件,以便从中提取一些数据并将其显示在网站上。但是,当我使用不以 .xml 扩展名结尾的 url 时,我无法在结果上运行 foreach 循环。换句话说,当我使用这种 url 时:
$url = http://www.example.com/some_xml_file.xml
我可以在它上面运行一个 foreach 循环,它就像魅力一样。但是这一次我必须处理这种类型的 url:
$url = http://www.example.com/?some_var=something&some=something
所以你可以清楚地看到它不包含.xml 扩展名。它返回了很好的解析结果,但我无法让 foreach 循环处理这个结果,因此我无法从中提取任何数据。你能帮我解决这个问题吗?
我在做什么的例子:
$url = 'http://www.example.com/?some_var=something&some=somethinge';
$sx = simplexml_load_file($url);
foreach ($sx->response as $row)
{
echo $row['status'];
}
这是 var_dump($sx) 的结果:
object(SimpleXMLElement)#334 (2) { ["@attributes"]=> array(2) { ["status"]=> string(2) "ok" ["version"]=> string(3) "1.0" } ["events"]=> object(SimpleXMLElement)#333 (2) { ["@attributes"]=> array(3) { ["resultCount"]=> string(1) "1" ["pageSize"]=> string(2) "15" ["pageIndex"]=> string(1) "0" } ["event"]=> object(SimpleXMLElement)#338 (10) { ["@attributes"]=> array(1) { ["id"]=> string(6) "180085" } ["name"]=> string(27) "Lady Gaga Monster Ball Tour" ["doordatetime"]=> string(19) "2010-11-01T18:30:00" ["tickets"]=> object(SimpleXMLElement)#337 (1) { ["ticket"]=> array(5) { [0]=> object(SimpleXMLElement)#339 (7) { ["@attributes"]=> array(1) { ["id"]=> string(6) "307902" } ["price"]=> string(7) "£55.00" ["url"]=> string(32) "http://www.gigjunkie.net/T307902" ["provider"]=> string(12) "Ticketmaster" ["soldout"]=> string(5) "false" ["ticketsavailable"]=> string(4) "true" ["issecondary"]=> string(5) "false" } [1]=> object(SimpleXMLElement)#340 (7) { ["@attributes"]=> array(1) { ["id"]=> string(6) "426248" } ["price"]=> string(7) "£82.00" ["url"]=> string(32) "http://www.gigjunkie.net/T426248" ["provider"]=> string(8) "Seatwave" ["soldout"]=> string(5) "false" ["ticketsavailable"]=> string(4) "true" ["issecondary"]=> string(4) "true" } [2]=> object(SimpleXMLElement)#437 (6) { ["@attributes"]=> array(1) { ["id"]=> string(6) "306230" } ["url"]=> string(32) "http://www.gigjunkie.net/T306230" ["provider"]=> string(7) "Viagogo" ["soldout"]=> string(5) "false" ["ticketsavailable"]=> string(4) "true" ["issecondary"]=> string(4) "true" } [3]=> object(SimpleXMLElement)#438 (6) { ["@attributes"]=> array(1) { ["id"]=> string(6) "325819" } ["url"]=> string(32) "http://www.gigjunkie.net/T325819" ["provider"]=> string(15) "WorldTicketShop" ["soldout"]=> string(5) "false" ["ticketsavailable"]=> string(4) "true" ["issecondary"]=> string(4) "true" } [4]=> object(SimpleXMLElement)#342 (6) { ["@attributes"]=> array(1) { ["id"]=> string(6) "402593" } ["url"]=> string(32) "http://www.gigjunkie.net/T402593" ["provider"]=> string(14) "Empire Tickets" ["soldout"]=> string(5) "false" ["ticketsavailable"]=> string(4) "true" ["issecondary"]=> string(4) "true" } } } ["venue"]=> object(SimpleXMLElement)#336 (9) { ["@attributes"]=> array(1) { ["id"]=> string(4) "1479" } ["name"]=> string(13) "Odyssey Arena" ["street"]=> string(13) "2 Queens Quay" ["town"]=> string(7) "Belfast" ["nameandtown"]=> string(22) "Odyssey Arena, Belfast" ["country"]=> string(2) "GB" ["gjurl"]=> string(90) "http://www.gigjunkie.net/gigs/Lady-Gaga-Monster-Ball-Tour/Odyssey-Arena/01-Nov-2010/180085" ["latitude"]=> string(9) "54.602158" ["longitude"]=> string(9) "-5.918215" } ["gjurl"]=> string(90) "http://www.gigjunkie.net/gigs/Lady-Gaga-Monster-Ball-Tour/Odyssey-Arena/01-Nov-2010/180085" ["artists"]=> object(SimpleXMLElement)#341 (1) { ["artist"]=> object(SimpleXMLElement)#332 (5) { ["@attributes"]=> array(2) { ["id"]=> string(5) "54194" ["isprimary"]=> string(4) "true" } ["name"]=> string(9) "Lady Gaga" ["gjurl"]=> string(42) "http://www.gigjunkie.net/artists/Lady-Gaga" ["thumbnailimage"]=> string(68) "http://images.gigjunkie.net/f5376fab-cd01-4432-9205-8a1d0be41437.jpg" ["mediumimage"]=> string(68) "http://images.gigjunkie.net/efbe624c-b63d-452a-a89b-221e846147ab.jpg" } } ["iscancelled"]=> string(5) "false" ["genre"]=> string(8) "Rock/Pop" ["image"]=> string(68) "http://images.gigjunkie.net/efbe624c-b63d-452a-a89b-221e846147ab.jpg" } } }
【问题讨论】:
-
您能否发布(至少是开头)您的数据检索和处理代码?
-
您的新示例有点错误——如果您按照 Cristian 的建议执行 simplexml_load_file(url),则您也不需要 simplexml_load_string()。 simplexml_load_file() 将直接返回一个 XML 对象,因此您不需要 file_get_contents() 或 simplexml_load_string()。只需使用
$sx = simplexml_load_file($url)并像现在一样在$sx上运行foreach。 -
你是否建议做类似的事情:
$sx = simplexml_load_file($url); foreach ($sx->response as $row) { echo $row['status']; } -
@Pavel 是的,应该可以。 simplexml_load_file() 创建一个 SimpleXML 对象,您应该可以直接使用它。它基本上是您最初通过将文件加载到字符串中然后从字符串创建 SimpleXML 对象的快捷方式。
-
当我运行 var_dump($sx) 时,它会很好地返回结果 - 这就是为什么我不明白为什么我不能在其上运行 foreach 循环:/
标签: php javascript wordpress