使用python从xml打印标记值

2024-10-01 15:45:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个Python脚本,在XML输出中打印特定标记的值。这里,我需要打印的标记值是XML输出中每次出现的值。我尝试如下,但它显示了一个属性错误。这里怎么了?哪种方法是正确的获取和打印某些我感兴趣的标签的值?有什么帮助吗?谢谢。在

import xml.etree.ElementTree as ET

mystring="""<?xml version="1.0" encoding="UTF-8"?>
<main>
    <student>
        <male>
            <result>pass</result>
            <name>Paul</name>
            <address>boston</address>
            <localreference>
                <name>Charlie</name>
            </localreference>
        </male>
        <female>
            <result>pass</result>
            <name>Rose</name>
            <address>newyork</address>
            <localreference>
                <name>Charlie</name>
            </localreference>
        </female>
    </student>
    <student>
        <male>
            <result>fail</result>
            <name>Philippe</name>
            <address>boston</address>
            <localreference>
                <name>White</name>
            </localreference>
        </male>
    </student>
</main>"""

main = ET.fromstring(mystring)
for student in main:
  if (student.tag == "student"):
      print student.find("male/result").text
      print student.find("female/result").text

错误>

^{pr2}$

Tags: name标记mainaddress错误passxmlresult
2条回答

打印标记值的代码是正确的,但您要求的xml部分不存在。第二学生区没有女生区。这就是为什么student.find("female/result")在第二个学生上返回None,而不能对None对象调用{}。在

ElementTree支持XPath的子集,对于您的示例来说,这可能更容易:

root = ET.fromstring(mystring)
for gender in ('male', 'female'):
    print gender
    for student in root.findall('./student/%s' % gender): 
        print '\t{:20}: {}'.format(student.find('name').text, student.find('result').text)

印刷品:

^{pr2}$

(顺便说一句:避免使用main作为变量名,因为您删除了main模块的名称)


如果希望结果按文档顺序而不是按性别分组,可以执行以下操作:

for students in root.findall('./student'):
    for gender in students:
        print ' '.join([gender.tag] + map(lambda a: gender.find(a).text, ('name', 'address', 'result', 'localreference/name')))

印刷品

male Paul boston pass Charlie
female Rose newyork pass Charlie
male Philippe boston fail White

相关问题 更多 >

    热门问题