如何使用python从xml检索特定元素

问题描述:

我正在尝试阅读我正在获取的xml Feed,但无法访问特定元素。我正在使用python,并且python文档对于我应该使用的内容还不清楚。如何使用python从xml检索特定元素

这里是饲料:

<title>More eagle</title> 
<summary>http://www.181.fm/winamp.plsstation=181eagle&amp;style=&amp;description=The%20Eagle%20(Classic ...</summary> 
<link rel="alternate" href="http://mail.google.com/mail [email protected]&amp;message_id=12995390f36c310b&amp;view=conv&amp;extsrc=atom" type="text/html" /> 
<modified>2010-07-02T22:13:51Z</modified> 
<issued>2010-07-02T22:13:51Z</issued> 
<id>tag:gmail.google.com,2004:1340194246143783179 </id> 

这里是我当前的功能:

def parse_xml(feed): 
    feedxml = minidom.parseString(feed) 
    name = feedxml.getElementsByTagName('name') 
    subject = feedxml.getElementsByTagName('title') 
    contents = feedxml.getElementsByTagName('summary') 
    return name + "\n" + subject + "\n" + contents 
+0

为了澄清,我需要得到元素标签之间的文本。现在我收到以下内容: [] – SachaK 2010-07-06 17:25:38

getElementsByTagName() 

返回元素的列表。所以如果你想要第一个(或唯一)一个,你需要使用getElementsByTagName('name')[0]

但是,这是一个元素对象,而不是它所包含的文本(我认为你感兴趣)。

所以,你可能需要做这样的事情:

nametag = feedxml.getElementsByTagName('name')[0] 
nametag.normalize() 
name = nametag.firstChild.data 
+0

这工作!谢谢。 – SachaK 2010-07-06 17:29:56

为了让你不得不做这样的事情的元素的文本:

def getElementText(node, tagName): 
    for node in node.getElementsByTagName(tagName): 
     result = "" # handle empty elements 
     for tnode in node.childNodes: 
     if tnode.nodeType == tnode.TEXT_NODE: 
      result = tnode.data 
    return result 

    def parse_xml(feed): 
    feedxml = minidom.parseString(feed) 
    name = getElementText(feedxml,'name') 
    subject = getElementText(feedxml,'title') 
    contents = getElementText(feedxml,'summary') 
    return name + "\n" + subject + "\n" + contents