【问题标题】:How to correctly parse XML attributes and append in list with Python?如何正确解析 XML 属性并使用 Python 追加到列表中?
【发布时间】:2020-01-13 23:17:44
【问题描述】:

如何使用 elementtree 正确解析 XML 文件 (config.xml)?

使用函数getting_config_from_file()(目标是检索一个包含所有主题id的列表以供以后使用。但这个函数实际上并没有返回任何东西。我也认为对于某些人因为它甚至没有输入for 语句。我可以做些什么不同的事情?

这是我的功能:

def getting_config_from_file():
    tree = ET.parse('config.xml')
    root = tree.getroot()
    parsed_subjects = []
    for x in root[0]:
        parsed_subjects.append(x.attrib)
    print(parsed_subjects)
    return parsed_subjects

这是我的 xml 文件的样子

<?xml version="1.0" encoding="UTF-8" ?>
<all_configs>
    <subjects>
        <subject>
            <id>EB101</id>
            <subject_name>Cálculo I</subject_name>
            <classes_no>1</classes_no>
            <pre_reqs></pre_reqs>
        </subject>
        <subject>
            <id>SI100</id>
            <subject_name>Algoritmos e Programação de Computadores I</subject_name>
            <classes_no>2</classes_no>
            <pre_reqs></pre_reqs>
        </subject>
        <subject>
            <id>SI120</id>
            <subject_name>Lógica Matemática</subject_name>
            <classes_no>1</classes_no>
            <pre_reqs></pre_reqs>
        </subject>
        <subject>
            <id>SI201</id>
            <subject_name>Estrutura de Dados I</subject_name>
            <classes_no>2</classes_no>
            <pre_reqs></pre_reqs>
        </subject>
        <subject>
            <id>SI250</id>
            <subject_name>Economia e Finanças</subject_name>
            <classes_no>3</classes_no>
            <pre_reqs>SI100</pre_reqs>
        </subject>
    </subjects>
    <parameters>
        <parameter>
            <parameter_name>Below Average</parameter_name>
            <min_grade>0</min_grade>
            <max_grade>5</max_grade>
        </parameter>
        <parameter>
            <parameter_name>Average</parameter_name>
            <min_grade>5</min_grade>
            <max_grade>7</max_grade>
        </parameter>
        <parameter>
            <parameter_name>Above Average</parameter_name>
            <min_grade>7</min_grade>
            <max_grade>10</max_grade>
        </parameter>
    </parameters>
</all_configs>
</xml>

【问题讨论】:

    标签: python xml list parsing elementtree


    【解决方案1】:

    xml文件最后不应该有&lt;/xml&gt;,结果可能解析不出来。尽管如此,.attrib 将查找元素的属性。 subject 元素没有任何属性,因此返回一个空列表。

    要为每个subject 获取id,我们需要访问for 循环中的第一个元素。下面是它的样子:

     def getting_config_from_file():
        tree = ET.parse('config.xml')
        root = tree.getroot()
        parsed_subjects = []
        for x in root[0]: # access each subject
            parsed_subjects.append(x[0].text) # every x is an element. 0 refers to the first element.
        print(parsed_subjects)
        return parsed_subjects
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      相关资源
      最近更新 更多