python minidom在结果中解析带有冒号的XML提要

时间:2011-02-28 22:49:41

标签: python xml

我正在尝试解析显示NFL计划的XML Feed,其中一个属性是游戏时间,看起来像这个GameTime =“8:30 PM”

这是XML的样子

的剪辑
<Schedule Season="2010" Timezone="Eastern">
  <Game gameId="1" Week="1" GameDate="2010-09-09" AwayTeam="MIN" HomeTeam="NO" GameTime="8:30 PM"/>
  <Game gameId="2" Week="1" GameDate="2010-09-12" AwayTeam="MIA" HomeTeam="BUF" GameTime="1:00 PM"/>
  <Game gameId="3" Week="1" GameDate="2010-09-12" AwayTeam="DET" HomeTeam="CHI" GameTime="1:00 PM"/>
  <Game gameId="4" Week="1" GameDate="2010-09-12" AwayTeam="OAK" HomeTeam="TEN" GameTime="1:00 PM"/>
</Schedule>

这是我的代码来阅读它

url="http://example.com/schedule.xml"
dom = minidom.parse(urllib2.urlopen(url))

for node in dom.getElementsByTagName('Game'):
    print node.getAttribute('AwayTeam'),
    print node.getAttribute('HomeTeam'),
    print node.getAttribute('Week'),
    print node.getAttribute('gameId'),
    print node.getAttribute('GameDate'),
    print node.getAttribute('GameTime')

它会打印我期望的内容,直到我添加最后一行。 ETA:一旦添加了最后一行,它就会从XML的打印行变为零。

 print node.getAttribute('GameTime')

我认为这是因为返回的数据中有一个冒号,但我无法找到任何东西来帮助我转义它以允许它打印或忽略它。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我试图重现你的错误,但它打印得很好。

我尝试从Python模块中的字符串加载数据,我尝试从命名文件加载数据,然后尝试从文件对象加载数据。他们都处理结肠就好了。

现在唯一的区别似乎是获取数据的方式:urllib2.openurl()。也许该函数返回的数据并不完全是minidom所期望的。或者它可能与冒号角色有关。

以下是我使用的代码(test.xml文件包含与三引号字符串中相同的xml数据):

from xml.dom import minidom

src = """
<Schedule Season="2010" Timezone="Eastern">
  <Game gameId="1" Week="1" GameDate="2010-09-09" AwayTeam="MIN" HomeTeam="NO" GameTime="8:30 PM"/>
  <Game gameId="2" Week="1" GameDate="2010-09-12" AwayTeam="MIA" HomeTeam="BUF" GameTime="1:00 PM"/>
  <Game gameId="3" Week="1" GameDate="2010-09-12" AwayTeam="DET" HomeTeam="CHI" GameTime="1:00 PM"/>
  <Game gameId="4" Week="1" GameDate="2010-09-12" AwayTeam="OAK" HomeTeam="TEN" GameTime="1:00 PM"/>
</Schedule>
"""

def test_print(dom):
    for node in dom.getElementsByTagName('Game'):
        print node.getAttribute('AwayTeam'),
        print node.getAttribute('HomeTeam'),
        print node.getAttribute('Week'),
        print node.getAttribute('gameId'),
        print node.getAttribute('GameDate'),
        print node.getAttribute('GameTime')
    print ''

dom = minidom.parseString(src)
test_print(dom)

dom = minidom.parse('data.xml')
test_print(dom)

f = open('data.xml', 'r')
dom = minidom.parse(f)
test_print(dom)
f.close()

url = 'http://api.fantasyfootballnerd.com/ffnScheduleXML.php?apiKey=1'
dom = minidom.parse(urllib2.urlopen(url))
test_print(dom)

编辑:添加了Mike(原作者)提供的URL测试。