通过xml.dom.minidom处理RSS / RDF

时间:2010-03-31 07:43:09

标签: python rss

我正在尝试通过python处理美味的RSS Feed。这是一个示例:

...
  <item rdf:about="http://weblist.me/">
    <title>WebList - The Place To Find The Best List On The Web</title>
    <dc:date>2009-12-24T17:46:14Z</dc:date>
    <link>http://weblist.me/</link>
    ...
  </item>
  <item rdf:about="http://thumboo.com/">
    <title>Thumboo! Free Website Thumbnails and PHP Script to Generate Web Screenshots</title>
    <dc:date>2006-10-24T18:11:32Z</dc:date>
    <link>http://thumboo.com/</link>
...

相关代码是:

def getText(nodelist):
    rc = ""
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc = rc + node.data
    return rc

dom = xml.dom.minidom.parse(file)
items = dom.getElementsByTagName("item")
for i in items:
    title = i.getElementsByTagName("title")
    print getText(title)

我认为这会打印出每个标题,但我基本上得到空白输出。我确定我做了一些愚蠢的错事,但不知道是什么?

1 个答案:

答案 0 :(得分:4)

您正在将title个节点传递给getText,其nodeType不是node.TEXT_NODE。您必须在getText方法中循环遍历节点的所有子节点:

def getTextSingle(node):
    parts = [child.data for child in node.childNodes if child.nodeType == node.TEXT_NODE]
    return u"".join(parts)

def getText(nodelist):
    return u"".join(getTextSingle(node) for node in nodelist)

更好的是,在致电node.normalize()之前致电getTextSingle,以确保将node.TEXT_NODE类型的连续子项合并为一个node.TEXT_NODE