Python minidom 元素.data 只返回对象,不返回文本

0 投票
1 回答
1098 浏览
提问于 2025-04-17 08:27

我刚接触Python,正在尝试解析一个简单的Web-API返回的结果,这个结果的格式是XML,内容如下:

<rss version='2.0'>
<channel>
<title>www.onlinetvrecorder.com</title>
<description>OTR Torrents</description>
<link>http://www.onlinetvrecorder.com/</link>
<copyright>OTR</copyright>
<STATIONS>
    <ITEM>
      <TITLE>3SAT</TITLE>
      <COUNTRY>DE</COUNTRY>
      <LANGUAGE>DE</LANGUAGE>
    </ITEM>
    <ITEM>
      <TITLE>ANIXE</TITLE>
      <COUNTRY>DE</COUNTRY>
      <LANGUAGE>DE</LANGUAGE>
    </ITEM>
    <ITEM>
      <TITLE>ARD</TITLE>
      <COUNTRY>DE</COUNTRY>
      <LANGUAGE>DE</LANGUAGE>
    </ITEM>
</STATIONS>
</channel>
</rss>

我的解析器是这样的:

import xml.dom.minidom as dom

def parseStations(stationsResult):

    document = dom.parse(stationsResult)

    stations = []

    #get all ITEM elements and get their child TITLE
    items = document.getElementsByTagName("ITEM")

    for item in items:
        stationTitleNodeValue = item.getElementsByTagName("TITLE")[0].firstChild.data
        stations.append(stationTitleNodeValue);

    return stations

我想要获取XML中TITLE元素的文本值。但是当我把返回的列表内容打印到控制台时,结果是这样的:

<DOM Element: TITLE at 0x368e8c0>

我哪里做错了?有没有人能帮帮我?非常感谢!

克里斯蒂安

1 个回答

0

对我来说,这看起来没问题。你会得到一个DOM元素对象,在大多数情况下它可以像字符串一样使用。所以,像print x[0]这样的代码(其中x是你函数的返回值)通常能得到你想要的结果。

如果你只是想要一个站点名称的字符串列表,那就把它们转换成字符串(XML是Unicode或其子集,所以你应该使用Unicode字符串):

stations.append(unicode(stationTitleNodeValue))

顺便说一下,你写的内容可以用更简洁的列表推导式来表达:

def parseStations(stationsResult):
    return [unicode(item.getElementsByTagName("TITLE")[0].firstChild.data)
            for item in dom.parse(stationsResult).getElementsByTagName("ITEM")]

撰写回答