2009-12-29 83 views
0
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:jskit="http://purl.org/dc/elements/1.1/" > 
    <channel> 
     <title>www.domain.com/page_735.htm comments</title> 
     <link>http://www.domain.com/page_735.html</link> 
     <atom:link rel="self" type="application/rss+xml" href="http://js-kit.com/rss/domain.com/page_735.html"></atom:link> 
     <jskit:attribute key="md5path" value="eb7110ce84f5907c29f0717c171ad35e"></jskit:attribute> 
     <jskit:attribute key="path" value="/page_735.html"></jskit:attribute> 
     <description>RSS comments feed for www.domain.com/page_735.html</description> 
     <generator>JS-Kit Bulk Site Exporter 0.8</generator> 
     <lastBuildDate>Mon, 09 Nov 2009 10:35:47 +0000</lastBuildDate> 
     <item> 
      <guid>jsid-1259747304-188</guid> 
      <pubDate>Wed, 02 Dec 2009 09:48:24 +0000</pubDate> 
      <jskit:attribute key="IP" value="59.182.xxx.xxx"></jskit:attribute> 
      <jskit:attribute key="permalink" value="http://www.domain.com/page_735.html"></jskit:attribute> 
      <author>guest</author> 
      <jskit:attribute key="share_facebook" value="off"></jskit:attribute> 
      <jskit:attribute key="share_gfc" value="off"></jskit:attribute> 
      <jskit:attribute key="share_twitter" value="off"></jskit:attribute> 
      <jskit:attribute key="share_friendfeed" value="off"></jskit:attribute> 
      <jskit:attribute key="share_yahoo" value="off"></jskit:attribute> 
      <jskit:attribute key="Webpresence" value="[]"></jskit:attribute> 
      <description>im a disco dancer</description> 
      <jskit:parent-guid>jsid-1250154466-622</jskit:parent-guid> 
     </item> 
    </channel> 
</rss> 

我知道一點XML,但是這一種方式超出我的想象:(RSS XML命名空間的混亂

我如何提取固定鏈接或IP或家長的GUID值

我只能提取GUID,pubdate的,作者和說明

如果你使用一個命名空間,不知道解析器我找不出命名空間

+1

您正在使用哪個平臺? 。淨? Java的? 「jskit」的定義是什麼?這可能是根源。 – 2009-12-29 21:32:12

+0

現在在xml文件中增加了更多的數據..我試圖在php中使用simplexml來實現它 我有一個20MB的xml文件,它是js-kit的註釋轉儲。我基本上想把它導入到一個mysql數據庫中 該文檔包含每個頁面的渠道,並且在每個渠道中有幾個項目 – vk123 2009-12-29 21:41:35

回答

0

,那麼你就只能用冒號一些元素名稱他們。如果您使用支持名稱空間的解析器,則必須在指定您要查找的元素時,在前綴之前指定冒號後面的部分以及爲該部分定義的URI。

例如jskit:attribute - >命名空間'http://purl.org/dc/elements/1.1/'中名爲'attribute'的元素。

+0

是否現在做 $ item = $ xml-> channel [0] - > item [0 ]。 $ jskitinfo = $ item-> children('http://purl.org/dc/elements/1.1/'); 但是它返回了一堆對象,並且無法循環穿過它們 – vk123 2009-12-29 22:03:33

+0

好吧,現在您需要知道這個特定PHP工具包的人的幫助。 – bmargulies 2009-12-29 23:01:45

0

您將不得不使用XPath來查找正確的節點,然後從中獲取值xpath()始終返回array,所以你必須編寫一個小函數,只返回該數組的第一個元素

要訪問命名空間元素,可以使用XPath表達式或SimpleXML的children() method因爲「parent-guid」包含連字符,這使得寫作財產的名稱有點尷尬。

這是一個工作示例:

function attr(SimpleXMLElement $item, $key) 
{ 
    $values = $item->xpath('./jskit:attribute[@key="' . $key . '"]/@value'); 
    return $values[0]; 
} 

$rss = simplexml_load_string($xml); 

foreach ($rss->channel->item as $item) 
{ 
    $permalink = attr($item, 'permalink'); 

    // either 
    $parent_guid = $item->children('http://purl.org/dc/elements/1.1/')->{'parent-guid'}; 

    // or (PHP 5.2) 
    $parent_guid = $item->children('jskit', true)->{'parent-guid'}; 

    // or 
    $parent_guid = $item->xpath('./jskit:parent-guid'); 
    $parent_guid = $parent_guid[0]; 
}