使用 LXML 和 Python 解析 XML

Parsing XML using LXML and Python

我已经阅读了有关堆栈溢出的其他问题,但仍不确定如何进行。为了便于阅读,我简化了 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 文件中有几个 'event' 元素。我可以使用 tree.getiterator('event')

隔离每一个
for elt in tree.getiterator('event'):
    print elt.xpath('./homeTeam/name/text()')
    print elt.xpath('//startDateTime/text()') 

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

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

如有任何建议或指点,我们将不胜感激

当您寻找不同的东西时,您最终会得到不同的列表,但这应该没问题。这里的目标不是立即从 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)