如何正确解析 XML 属性并在列表中附加 Python?
How to correctly parse XML attributes and append in list with Python?
如何使用 elementtree 正确解析 XML 文件 (config.xml)?
使用函数getting_config_from_file()
(目标是检索一个包含所有主题id的列表以备后用。但是这个函数实际上并不return 任何东西。我还认为由于某种原因它甚至没有进入 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>
xml文件最后应该没有</xml>
,结果可能无法解析。尽管如此,.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
希望这对您有所帮助。
如何使用 elementtree 正确解析 XML 文件 (config.xml)?
使用函数getting_config_from_file()
(目标是检索一个包含所有主题id的列表以备后用。但是这个函数实际上并不return 任何东西。我还认为由于某种原因它甚至没有进入 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>
xml文件最后应该没有</xml>
,结果可能无法解析。尽管如此,.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
希望这对您有所帮助。