2014-01-09 85 views
0

這是我的小Python程序:LXML,如何讓原屬性值以CRLF

import xml.etree.ElementTree as etree 
tree = etree.parse('test.xml') 
root = tree.getroot() 
print root.attrib['a'] 

這是的test.xml文件:

<?xml version="1.0" encoding="utf-8" ?> 
<root a="line one 
line two 
line three"> 
</root> 

當我運行它,我得到:

line one line two line three 

雖然我希望:

line one 
line two 
line three 

如何實現預期的行爲?

+0

我不認爲這是可以實現......,爲什麼不把'線一條,線兩條,行three'三個獨立的屬性? – zhangxaochen

+0

請參閱規格:http://www.w3.org/TR/REC-xml/#AVNormalize。如上所述,你不能真正把一個換行符放在一個屬性值中 - '正確的'支持意味着用單個空格替換所有的空格。編輯:進一步閱讀,它看起來像你可能能夠使用屬性列表,並聲明屬性CDATA,在這種情況下,它將工作。從來沒有這樣做過,並且可能有一種更直接的方法(甚至不知道lxml是否會兌現...) –

+0

@zhangxaochen:我給了這樣的(錯誤?)xml,所以我不能改變其結構或內容。 – wanson

回答

0

您可以嘗試使用BeautifulSoup,這是一個很棒的Python庫,用於解析半破解xml/html。例如: -

from bs4 import BeautifulSoup 
xml = open('test.xml').read() 
soup = BeautifulSoup(xml) 
print soup.root.attrs['a'] 

它打印:

line one 
line two 
line three