Я пытаюсь проанализировать относительно сложный (для меня в любом случае!) XML-файл. Я уже писал в подобных темах и понимаю немного больше об этом. Однако это вызывает у меня проблемы. Отрывок из моего файла XML:Анализ синтаксиса XML и запись в CSV
<?xml version="1.0" ?>
<record number="1" type="custID" first-time="Wed Feb 4 19:22:57 2014" last-time="Fri Feb 7 10:11:02 2015">
<Customer name="Bob Janotior" custID="4466851">
<type>Monthly</type>
<max-books>5</max-books>
<rental status="false">overdue</essid>
</Customer>
<book title="All The Things" type="fiction" author="Jill Taylor" pubID="7744jh566lp">
<cover>softback</cover>
<pub>Penguin</pub>
</book>
<book title="Mellow Tides of War" type="non-fiction" author="Prof. Lambert et al" pubID="7744gd556se">
<cover>hardback</cover>
<pub>Penguin</pub>
</book>
</record>
<record number="2" type="custID" first-time="Wed Apr 8 15:23:54 2012" last-time="Fri Feb 7 10:11:02 2015">
<Customer name="Jayne Wrikcek" custID="4466787">
<type>Monthly</type>
<max-books>5</max-books>
<rental status="false">overdue</essid>
</Customer>
<book title="Kiss Me Hardy" type="fiction" author="AR Jones" pubID="766485gf66ki">
<cover>softback</cover>
<pub>/Kingsoft</pub>
</book>
<book title="Oskar Came Again" type="fiction" author="Johnathan Huphries" pubID="a5555qwd2">
<cover>hardback</cover>
<pub>Lofthouse</pub>
</book>
</record>
Так ранее я использовал этот сценарий, который я написал в Python 2.7:
from xml.dom.minidom import parse
import xml.dom.minidom
import csv
def writeToCSV(myLibrary):
with open('output.csv', 'wb') as csvfile:
writer = csv.writer(csvfile, delimiter=',',quotechar='"', quoting=csv.QUOTE_MINIMAL)
writer.writerow(['title', 'author', 'author'])
books = myLibrary.getElementsByTagName("book")
for book in books:
titleValue = book.getElementsByTagName("title")[0].childNodes[0].data
authors = [] # get all the authors in a vector
for author in book.getElementsByTagName("author"):
authors.append(author.childNodes[0].data)
writer.writerow([titleValue] + authors) # write to csv
doc = parse('library.xml')
myLibrary = doc.getElementsByTagName("library")[0]
# Print each book's title
writeToCSV(myLibrary)
Этот сценарий был фактически написанный для более простого файла XML. Я смущен, пытаясь адаптировать его для этого XML-файла, который имеет (для меня) гораздо более сложную структуру. Я медленно вписываюсь в минидомы и записи csv, но для меня это все еще нова. Это своего рода выход я хотел бы в моем CSV файл:
И это своего рода выход, который я хочу в моем CSV файл:
record number,type,Customer name,CustID,type,max-books,rental status,book,title,type,author,
1,custID,Bob Janotoir,4466851,Monthly,5,false,overdue,All The Things,fiction,Jill Taylor,
2,custID,Jayne Wrikcek,4466787,Monthly,5,false,overdue,Kiss Me Hardy,fiction,AR Jones,