你可能使用iterparse
方法,這意味着處理大型XML文件。但是,您的文件具有特別簡單的結構。使用iterparse會不必要的複雜。
我會在一個腳本中提供兩個答案。我直接通過展示如何使用lxml解析xml中的行來回答你的問題,並提供我認爲可能是使用正則表達式更好的答案。
該代碼讀取xml中的每一行,並忽略那些不以'try ... except開頭的行。當腳本找到這樣的一行時,它將它從lxml傳遞給etree
進行解析,然後顯示行中的屬性。之後,它使用正則表達式來解析出相同的屬性並顯示它們。
我強烈懷疑正則表達式會更快。
>>> from lxml import etree
>>> report = '''\
... <report>
... <table>
... <detail name="John" surname="Smith">
... <detail name="Michael" surname="Smith">
... <detail name="Nick" surname="Smith">
... </table>
... </report>'''
>>> import re
>>> re.search(r'name="([^"]*)"\s+surname="([^"]*)', line).groups()
('John', 'Smith')
>>> for line in report.split('\n'):
... if line.strip().startswith('<detail'):
... tree = etree.fromstring(line.replace('>', '/>'))
... tree.attrib['name'], tree.attrib['surname']
... re.search(r'name="([^"]*)"\s+surname="([^"]*)', line).groups()
...
('John', 'Smith')
('John', 'Smith')
('Michael', 'Smith')
('Michael', 'Smith')
('Nick', 'Smith')
('Nick', 'Smith')
那是什麼,你所得到的錯誤? –
你想要做什麼處理? –