<p>解决问题的好方法是使用lxml:</p>
<pre><code>>>> with open('doc.xml') as f:
>>> doc = etree.XML(f.read())
>>> for e in doc.xpath('book'):
>>> print (e.xpath('author/text()'), e.xpath('title/text()')[0])
(['Neil Gaiman'], 'Sandman Volume 1: Preludes and Nocturnes')
(['Neil Gamain', 'Terry Pratchett'], 'Good Omens')
(['Bubber Elderidge'], 'The Man And The Goat')
(['Dr Dre'], 'Once Upon A Time in LA')
(['IR Jury'], 'There Will Never Be Justice')
(['Peter Norton, et al'], 'Beginning Python')
</code></pre>
<p>然后,要生成csv,可以执行以下操作:</p>
^{pr2}$
<p>或者:</p>
<pre><code> with open('output.csv', 'w') as fout:
fieldnames = ['title', 'author1', 'author2']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for e in doc.xpath('book'):
title, authors = e.xpath('author/text()'), e.xpath('title/text()')[0]
author1, author2 = '', ''
if len(authors) == 2:
author2 = author[1]
if len(authors) == 1:
author1 = author[0]
writer.writerow({'title': titleValue, 'author1': author1, 'author2': author2})
</code></pre>