2016-04-08 2 views
1

Так у меня есть XML подобное:xmltodict: Не извлечения правильных вложенных элементов

<main> 
    <site>Amazon</site> 
    <url>..</url> 
    <books> 
    <book> 
     <id>1</id> 
     <author>Jhon</author> 
    </book> 
    <book> 
     <id>2</id> 
     <author>Jhon</author> 
    </book> 
    <book> 
     <id>3</id> 
     <author>Jhon</author> 
    </book> 
    </books> 
</main> 

Я доступе к нему как:

document = xmltodict.parse(xml) 
books = document['books]['book'] #returns 3 
for book in books: 
    pass 

Но если XML, как:

<books> 
<book> 
    <id>3</id> 
    <author>Jhon</author> 
</book> 
</books> 

затем вместо возвращается , являющийся дочерним по отношению к <books>

Что я делаю неправильно?

ответ

1

Это общая проблема с xmltodict, который обсуждался здесь:

Обойти такое поведение было бы использовать force_list вариант (доступен в главной ветви на момент):

xmltodict.parse(data, force_list={'books': 'book'}) 
+0

hmm interesting. Это все испортило: 'books = document ['books] [' book ']' больше не работает; дает ошибку 'индексы списка должны быть целыми числами, а не str' – Volatil3

+0

@ Volatil3 да, теперь это всегда список:' [book ['author'] для книги в документе ['books']] '.. но я действительно нахожу его более логично .. – alecxe

+0

Я должен был бы поставить весь XML. Я просто обновил Qs, нет итеративных элементов, и из того, что я вижу, кажется, что он испортил весь формат – Volatil3

Смежные вопросы