Python ElementTree XML 解析多个答案
Python ElementTree XML Parsing with Multiple Answers
我正在解析由 My Movies 5 生成的 movie.xml 文件以获取电影的流派。有些电影有多种类型,例如:
-<Genres>
<Genre>Adventure</Genre>
<Genre>Comedy</Genre>
<Genre>Action</Genre>
...
...
</Genres>
如何将其作为单个变量读取
流派 = 流派 1、流派 2、流派 3 ...
这就是我正在做的,它只给了我第一个类型:
import xml.etree.ElementTree as ET
tree = ET.parse('movie.xml')
root = tree.getroot()
Genre = tree.findtext("Genres/Genre")
缩短后的movie.xml如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--This file is created by My Movies (http://www.mymovies.dk)-->
<Title IsBoxSetParent="False" IsBoxSetChild="False">
<ID>649</ID>
<MediaType>Movie</MediaType>
<LocalTitle>Six Days, Seven Nights</LocalTitle>
<ProductionYear>1998</ProductionYear>
<ReleaseDate>12/8/1998</ReleaseDate>
<RunningTime>101</RunningTime>
<TagLine />
<Genres>
<Genre>Adventure</Genre>
<Genre>Comedy</Genre>
<Genre>Action</Genre>
<Genre>Romance</Genre>
</Genres>
<AudioTracks>
<AudioTrack Language="English" Type="Dolby Digital" Channels="5.1" />
<AudioTrack Language="French" Type="Dolby Digital" Channels="5.1" />
</AudioTracks>
<CheckSum>f98f43ba468b519bb7e78c15b7ab9cfa</CheckSum>
</Title>
您可以尝试使用 findall()
调用,使用 map
提取其文本并使用 join
创建包含所有结果的字符串,例如:
import xml.etree.ElementTree as ET
tree = ET.parse('movie.xml')
root = tree.getroot()
Genre = ', '.join(map(lambda e: e.text, tree.findall("Genres/Genre")))
print(Genre)
产生:
Adventure, Comedy, Action, Romance
谢谢,这比我想出的其他方法更优雅。
genre=""
for element in root.iter("Genre"):
genre = genre + ", " + ("%s" % (element.text))
print genre
产生相同的:
Adventure, Comedy, Action, Romance
我正在解析由 My Movies 5 生成的 movie.xml 文件以获取电影的流派。有些电影有多种类型,例如:
-<Genres>
<Genre>Adventure</Genre>
<Genre>Comedy</Genre>
<Genre>Action</Genre>
...
...
</Genres>
如何将其作为单个变量读取 流派 = 流派 1、流派 2、流派 3 ...
这就是我正在做的,它只给了我第一个类型:
import xml.etree.ElementTree as ET
tree = ET.parse('movie.xml')
root = tree.getroot()
Genre = tree.findtext("Genres/Genre")
缩短后的movie.xml如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--This file is created by My Movies (http://www.mymovies.dk)-->
<Title IsBoxSetParent="False" IsBoxSetChild="False">
<ID>649</ID>
<MediaType>Movie</MediaType>
<LocalTitle>Six Days, Seven Nights</LocalTitle>
<ProductionYear>1998</ProductionYear>
<ReleaseDate>12/8/1998</ReleaseDate>
<RunningTime>101</RunningTime>
<TagLine />
<Genres>
<Genre>Adventure</Genre>
<Genre>Comedy</Genre>
<Genre>Action</Genre>
<Genre>Romance</Genre>
</Genres>
<AudioTracks>
<AudioTrack Language="English" Type="Dolby Digital" Channels="5.1" />
<AudioTrack Language="French" Type="Dolby Digital" Channels="5.1" />
</AudioTracks>
<CheckSum>f98f43ba468b519bb7e78c15b7ab9cfa</CheckSum>
</Title>
您可以尝试使用 findall()
调用,使用 map
提取其文本并使用 join
创建包含所有结果的字符串,例如:
import xml.etree.ElementTree as ET
tree = ET.parse('movie.xml')
root = tree.getroot()
Genre = ', '.join(map(lambda e: e.text, tree.findall("Genres/Genre")))
print(Genre)
产生:
Adventure, Comedy, Action, Romance
谢谢,这比我想出的其他方法更优雅。
genre=""
for element in root.iter("Genre"):
genre = genre + ", " + ("%s" % (element.text))
print genre
产生相同的:
Adventure, Comedy, Action, Romance