2016-01-27 62 views
1

我想解析傳遞給函數參數的簡單XML塊。然後我想在最後的<cd>元素內返回標題,在這裏:'仍然有藍調'。出於某種原因,我在執行此操作時遇到了問題(首次解析XML)。這是現在我的功能,這是基於什麼我已經從xml.etree.ElementTree文檔閱讀:使用xml.etree.ElementTree解析XML

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> 
''' 

回答

1

您試圖切片發現元素的列表,而不是通過指數-1得到的最後一個元素,然後用findtext()方法找到內標題:

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

演示:

>>> 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 
+0

謝謝@alecxe !!像魅力一樣工作。所以在這種情況下,element.findall('title')。text不起作用?怎麼樣element.find('title').text? –

+0

@Izzy是啊'element.find('title')。text'也可以。 – alecxe

+0

謝謝!你知道我可以通過諸如sex =「female」這樣的屬性進行搜索嗎?顯然它不是element.findall('artist',sex =「female」)。text:p –