使用 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)
我已经阅读了有关堆栈溢出的其他问题,但仍不确定如何进行。为了便于阅读,我简化了 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)