Как получить определенный элемент с из XML с Python - PullRequest
0 голосов
/ 06 июля 2010

Я пытаюсь прочитать получаемый XML-канал, но не могу получить доступ к определенным элементам.Я использую python, и в документации по python действительно неясно, что мне следует использовать.

Вот канал:

<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 ]

1 голос
/ 09 февраля 2011

Чтобы получить текст элемента, вы должны сделать что-то вроде этого:

  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
1 голос
/ 06 июля 2010
getElementsByTagName()

возвращает список элементов. Так что если вы хотите первый (или единственный), вам нужно использовать getElementsByTagName('name')[0].

Но это объект элемента, а не текст, заключенный в него (что, я полагаю, вас интересует).

Так что вам, вероятно, нужно сделать что-то вроде этого:

nametag = feedxml.getElementsByTagName('name')[0]
nametag.normalize()
name = nametag.firstChild.data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...