Проблема с разбором xml файла с использованием php.URL-адрес не содержит расширение .xml - PullRequest
0 голосов
/ 15 октября 2010

Привет, ребята. Я пытаюсь проанализировать XML-файл, чтобы извлечь из него некоторые данные и отобразить их на веб-сайте. Однако, когда я использую URL, который не заканчивается расширением .xml, я не могу запустить цикл 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" } } } 

Ответы [ 2 ]

2 голосов
/ 15 октября 2010

Просто используйте функцию simplexml_load_file, она вернет значение False, если не может проанализировать xml

<?php
$url = 'http://www.example.com/?some_var=something&some=something'
if(simplexml_load_file($url)){
    // is a xml
else {
    // no xml found
}
?>

Более подробную информацию можно найти здесь: http://www.php.net/manual/en/function.simplexml-load-file.php

1 голос
/ 15 октября 2010

Ваша обработка не соответствует структуре вашего документа XML.Похоже, ваша обработка ожидает документ, подобный следующему:

<some_document>
  <response status="ok">...</response>
  <response status="ok">...</response>
  ...
</some_document>

Однако, судя по виду вашего var_dump, структура документа не такова.Вот почему вы не можете перебирать элементы «response» с помощью foreach() - я не думаю, что есть какие-то элементы для перебора.

Если вы можете опубликовать фактический документ XML, мы, вероятно, сможемисправьте свою обработку так, чтобы она соответствовала ей.

Главное, что я должен иметь в виду, это то, что SimpleXMLElement работает так, что возвращаемый вами объект является корнем документа XML, поэтому, если ваш документвыглядит так:

<response>
   <some_data>...</some_data>
   <some_other_data>...</some_other_data>
</response>

... тогда $sx->response не будет.$ sx - это элемент <response>, он не содержит его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...