Python 使用XML.etree.ElementTree解析XML

Python 使用XML.etree.ElementTree解析XML,python,xml,parsing,Python,Xml,Parsing,我试图解析一个传递到函数参数中的简单XML块。然后我想返回最后一个元素中的标题,在这里是:“仍然有蓝色”。出于某种原因,我在做这件事时遇到了困难(第一次解析XML)。这是我现在的函数,它基于我从xml.etree.ElementTree文档中读到的内容: def get_last_title(xmlstr): xml = ET.fromstring(xmlstr) return xml.findall('cd')[-1:].findall('title').text XML如下所示:

我试图解析一个传递到函数参数中的简单XML块。然后我想返回最后一个
元素中的标题,在这里是:“仍然有蓝色”。出于某种原因,我在做这件事时遇到了困难(第一次解析XML)。这是我现在的函数,它基于我从xml.etree.ElementTree文档中读到的内容:

def get_last_title(xmlstr):
  xml = ET.fromstring(xmlstr)
  return xml.findall('cd')[-1:].findall('title').text
XML如下所示:

xml_doc ='''<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
    <cd>
        <title>Empire Burlesque</title>
        <artist sex="male">Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </cd>
    <cd>
        <title>Hide your heart</title>
        <artist sex="female">Bonnie Tyler</artist>
        <country>UK</country>
        <company>CBS Records</company>
        <price>9.90</price>
        <year>1988</year>
    </cd>
    <cd>
        <title>Greatest Hits</title>
        <artist sex="female">Dolly Parton</artist>
        <country>USA</country>
        <company>RCA</company>
        <price>9.90</price>
        <year>1982</year>
    </cd>
    <cd>
        <title>Still got the blues</title>
        <artist sex="male">Gary Moore</artist>
        <country>UK</country>
        <company>Virgin records</company>
        <price>10.20</price>
        <year>1990</year>
    </cd>
</catalog>
'''
xml\u doc=''
皇帝讽刺剧
鲍勃·迪伦
美国
哥伦比亚
10.90
1985
隐藏你的心
邦尼泰勒
英国
哥伦比亚唱片公司
9.90
1988
最成功的
多莉·帕顿
美国
RCA
9.90
1982
还是那么忧郁吗
加里摩尔
英国
维珍唱片
10.20
1990
'''

您试图对找到的元素列表进行切片,而不是通过
-1
索引获取最后一个元素,然后使用方法查找内部标题:

xml.findall('cd')[-1].findtext('title')
演示:

>将xml.etree.cElementTree作为ET导入
>>> 
>>>xml_doc=''
这里是您的XML
... '''
>>> 
>>>xml=ET.fromstring(xml\u doc)
>>>打印(xml.findall('cd')[-1].findtext('title'))
还是那么忧郁吗

谢谢@alecxe!!工作得很有魅力。那么在这种情况下,element.findall('title')。text不起作用吗?那element.find('title')。text呢?@Izzy耶
element.find('title')。text
也可以。谢谢!您知道如何通过诸如sex=“female”之类的属性进行搜索吗?显然这不是元素。findall(“艺术家”,sex=“女性”)。文本:p@Izzy当然,xpath支持有限,但应该足够了:
element.findall('//artist[@sex=“female”]')
谢谢!知道我为什么会出现这个错误吗?:SyntaxError:无法在元素上使用绝对路径
>>> import xml.etree.cElementTree as ET
>>> 
>>> xml_doc ='''<?xml version="1.0" encoding="ISO-8859-1"?>
    Your XML here
... '''
>>> 
>>> xml = ET.fromstring(xml_doc)
>>> print(xml.findall('cd')[-1].findtext('title'))
Still got the blues