xml - 如何将以下标签中的所有文本项收集到名称为键,年份为值的字典中?

标签 xml python-3.x xpath

我一直在尝试将每个电影标签内的所有标签的值(分别)放入具有“名称”的字典中-电影名称作为键,年份作为值。

{"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/

相关文章:

ios - 有没有更简单的方法将 XML 转换为 Plist?

python - 在 python 中为 AWS Lambda 构建 TensorFlow 包

java - 获取类属性名称、其类型以及如果是集合则获取集合的泛型类型

Selenium:- 无法定位元素

php - 在 PHP 中使用 SimpleXml 函数时,XML 文件内容未显示在 apache2 本地主机上

div 内的 Javascript feedreader

php - 显示带有从 mysql 检索到的标记的谷歌地图

python - 分离 __iter__ 和 __next__ 方法

Python 3.2 - 连接和字符串格式化行为不符合预期

xpath - XQuery和BaseX-如何将输出存储到组合框?