我一直在尝试将每个电影标签内的所有标签的值(分别)放入具有“名称”的字典中-电影名称作为键,年份作为值。
{"a": 2018 , "b":2017, "c":2017, "d".2016}
我是Stackoverflow的新手,希望我已提供所有详细信息并结识了所有社区
请在此处找到最少的可重现XML代码
<collection>
<movie>
<name>a</name>
<year>2018</year>
</movie>
<movie>
<name>b</name>
<year>2017</year>
</movie>
<movie>
<name>c</name>
<year>2017</year>
</movie>
<movie>
<name>d</name>
<year>2016</year>
</movie>
<movie>
<name></name>
<year></year>
</movie>
</collection>
我已经尝试过使用ElementTree和XPath进行多种操作,但无法如上所述获取值。
如果有的话,我能够一起获取name标记中的所有值和year标记中的所有值-绝对没有用,因此我不在这里发布这些代码。
这是输出我能够得到...
[2018,2017,2017,2016]
[a,b,c,d]
但是,如果下面的标签具有不完整的值,则这是没有用的
<movie>
<name>d</name>
</year>
</movie>
<movie>
<name></name>
<year>2016</year>
</movie>
最佳答案
您可以使用BeautifulSoup实现xml解析
如果已安装pip,则可以运行以下命令来安装软件包:
pip3 install beautifulsoup4
这是代码:
from bs4 import BeautifulSoup
from pprint import pformat
xmlstring = """
<collection>
<movie>
<name>a</name>
<year>2018</year>
</movie>
<movie>
<name>b</name>
<year>2017</year>
</movie>
<movie>
<name>c</name>
<year>2017</year>
</movie>
<movie>
<name>d</name>
<year>2016</year>
</movie>
<movie>
<name></name>
<year></year>
</movie>
</collection>"""
soup = BeautifulSoup(xmlstring, "lxml")
movies = soup.select('movie')
my_dict = {}
for movie in movies:
key = movie.select_one('name').text
value = movie.select_one('year').text
if key != '':
my_dict.update({key: value})
print(pformat(my_dict))
输出:
{'a': '2018', 'b': '2017', 'c': '2017', 'd': '2016'}
要从文件读取,可以使用以下命令:
with open("file_name.xml") as fp:
xmlstring = fp.read()
关于xml - 如何将以下标签中的所有文本项收集到名称为键,年份为值的字典中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57024276/