【问题标题】:Parsing XML using LXML and Python使用 LXML 和 Python 解析 XML
【发布时间】:2015-01-28 19:49:01
【问题描述】:

我已阅读有关堆栈溢出的其他问题,但仍不确定如何继续。为了便于阅读,我已经简化了 XML 文档。

         <event>
            <time>2015-01-30T08:59:00Z</time>
            <homeTeam type="Team1">
              <name>United Arab Emirates</name>
            </homeTeam>
            <awayTeam type="Team2">
              <name>Iraq</name>
            </awayTeam>
            <periods>
              <period lineId="168809488">
                <number>0</number>
                <description>Match</description>
                <cutoffDateTime>2015-01-30T08:59:00Z</cutoffDateTime>
                <moneyLine>
                  <awayPrice>218</awayPrice>
                  <homePrice>148</homePrice>
                  <drawPrice>225</drawPrice>
                </moneyLine>
              </period>
            </periods>
          </event>

XML 文件中有几个“事件”元素。我可以使用tree.getiterator('event') 隔离每个人

for elt in tree.getiterator('event'):
    print elt.xpath('./homeTeam/name/text()')
    print elt.xpath('//startDateTime/text()') 

但是,这会产生两个列表。我每次都需要隔离主队名称、客队名称、客场价格、主场价格和抽奖价格,以便存储到 Mysql 数据库中。

我不确定如何在不结束不同列表的情况下迭代事件。一个包含所有时间,一个包含所有主队名称等

任何建议或指示将不胜感激

【问题讨论】:

    标签: python xml lxml


    【解决方案1】:

    当您在寻找不同的东西时,您最终会得到不同的列表,但这应该没问题。这里的目标不是立即从lxml 接口中获取结果,而是稍后获取可以放入mysql 数据库的内容,是吗?

    如果是这样,只需在插入过程中添加对zip 的调用就可以了。例如:

    home_teams = elt.xpath('./homeTeam/name/text()')
    away_teams = # something
    away_prices = # something
    
    full_iterator = zip(home_teams, away_teams, away_prices, etc...)
    for values in full_iterator:
        # For example
        mysql.insert(*values)
    

    【讨论】:

    • 感谢您的回答。不幸的是,这不会像我刚刚发现的那样工作。某些事件没有与之关联的 。因此,当 zip 时,列表中有空条目。有没有关于 zip 的好手册?
    • 可以在此处找到 zip 文档:docs.python.org/2/library/functions.html#zip,您不想要空条目吗?您可能还想查看 itertools 或打开另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    相关资源
    最近更新 更多