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

时间:2010-07-06 16:57:46

标签: python xml parsing

我正在尝试阅读我正在阅读的xml Feed,但我无法访问特定元素。我正在使用python,而python文档实际上并不清楚我应该使用什么。

以下是Feed:

<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 account_id=example@gmail.com&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

2 个答案:

答案 0 :(得分:1)

getElementsByTagName()

返回元素列表。因此,如果您想要第一个(或仅一个),则需要使用getElementsByTagName('name')[0]

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

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

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

答案 1 :(得分:1)

要获取元素的文本,您必须执行以下操作:

  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