2009-12-29 124 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]; 
}