2011-05-20 48 views
2

如何从XML文档返回标记为​​的所有项目?例如:如何查找数组中的某些XML项目?

[guid] => http://www.motorauthority.com/blog/1060293_aston-martin-v12-zagato-2011-concorso-deleganza-villa-deste 

这里是我的代码:

$source = 'http://feeds.feedburner.com/motorauthority2?format=xml'; 
$dom = new DOMDocument(); 
@$dom->loadHTMLFile($source); 
$xml = simplexml_import_dom($dom); 
$blog = $xml->xpath("//channel"); 
print_r($blog); 

这里是print_r输出:

Array 
(
    [0] => SimpleXMLElement Object 
     (
      [language] => en 
      [title] => High Gear Media Network Feed 
      [description] => Latest news, reviews, and more from around the High Gear Media network of sites 
      [image] => SimpleXMLElement Object 
       (
        [link] => SimpleXMLElement Object 
         (
         ) 

        [url] => http://www.motorauthority.com/images/logo-footer.jpg 
        [title] => MotorAuthority 
       ) 

      [lastbuilddate] => Fri, 20 May 2011 04:55:17 -0400 
      [generator] => High Gear Media 
      [link] => Array 
       (
        [0] => SimpleXMLElement Object 
         (
         ) 

        [1] => SimpleXMLElement Object 
         (
          [@attributes] => Array 
           (
            [atom10] => http://www.w3.org/2005/Atom 
            [rel] => self 
            [type] => application/rss+xml 
            [href] => http://feeds.feedburner.com/MotorAuthority2 
           ) 

         ) 

        [2] => SimpleXMLElement Object 
         (
          [@attributes] => Array 
           (
            [atom10] => http://www.w3.org/2005/Atom 
            [rel] => hub 
            [href] => http://pubsubhubbub.appspot.com/ 
           ) 

         ) 

       ) 

      [info] => SimpleXMLElement Object 
       (
        [@attributes] => Array 
         (
          [uri] => motorauthority2 
         ) 

       ) 

      [explicit] => no 
      [subtitle] => Latest news, reviews, and more from around the High Gear Media network of sites 
      [meta] => SimpleXMLElement Object 
       (
        [@attributes] => Array 
         (
          [xhtml] => http://www.w3.org/1999/xhtml 
          [name] => robots 
          [content] => noindex 
         ) 

       ) 

      [feedflare] => Array 
       (
        [0] => Subscribe with My Yahoo! 
        [1] => Subscribe with NewsGator 
        [2] => Subscribe with My AOL 
        [3] => Subscribe with Bloglines 
        [4] => Subscribe with Netvibes 
        [5] => Subscribe with Google 
        [6] => Subscribe with Pageflakes 
        [7] => Subscribe with Plusmo 
        [8] => Subscribe with The Free Dictionary 
        [9] => Subscribe with Bitty Browser 
        [10] => Subscribe with NewsAlloy 
        [11] => Subscribe with Live.com 
        [12] => Subscribe with Excite MIX 
        [13] => Subscribe with Attensa for Outlook 
        [14] => Subscribe with Webwag 
        [15] => Subscribe with Podcast Ready 
        [16] => Subscribe with Flurry 
        [17] => Subscribe with Wikio 
        [18] => Subscribe with Daily Rotation 
       ) 

      [item] => Array 
       (
        [0] => SimpleXMLElement Object 
         (
          [title] => Aston Martin V12 Zagato: 2011 Concorso d'Eleganza Villa d'Este 
          [description] => The weekend is finally upon us and that means the 2011 Concorso d’Eleganza Villa d’Este is kicking off, along with all that comes with it. Yesterday we saw a sneak peek at the new Ferrari Superamerica 45, built under the automaker’s Special Projects division and destined for a home in New York. Today we have another coachbuilt...]]> 
          [pubdate] => Fri, 20 May 2011 04:55:17 -0400 
          [link] => SimpleXMLElement Object 
           (
           ) 

          [guid] => http://www.motorauthority.com/blog/1060293_aston-martin-v12-zagato-2011-concorso-deleganza-villa-deste 

回答

3

你需要的XPath表达式是

/rss/channel/item/guid 

注那simplexml_load_file()可以处理一个URI。没有必要去DOMDocument

+0

作品谢谢! – sarsar 2011-05-20 12:14:23

0

您已经将XML转换为一个PHP数组,因此它应该只是递归扫描您要寻找的键的数组的情况。

像这样的东西应该这样做:

<?php 
function array_key_search_recursive($array,$keytofind) { 
    $output = array(); 
    foreach($array as $key=>$value) { 
     if($key == $keytofind) { 
      $output[] = $value; 
     } elseif(is_array($value)) { 
      $output = array_merge($output, array_key_search_recursive($value,$keytofind)); 
     } 
    } 
    return $output; 
} 

?> 

(注意我没有测试的代码之中;我只是敲它现在在一起,所以它可能有错误)

[编辑]第一发布这个答案后我注意到的事情是,你实际上并没有将其转换为数组;它仍然是一个对象(它只是print_r格式化它像一个数组)。上述内容仍然有效,但您需要将其作为对象来使用;可能的简单方法是将$array$value作为foreach循环中的类型数组。

相关问题