2011-05-20 25 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循環中的類型數組。

相關問題