Я использую API Amazon для получения информации о книгах.Я пытаюсь использовать lxml для извлечения определенных частей документа XMl, которые необходимы для моего приложения.Я не совсем уверен, как использовать lxml, хотя.Это насколько я получил:
root = etree.XML(response)
Чтобы создать объект etree для XML-документа.
Вот как выглядит XML-документ: http://pastebin.com/GziDkf1a Тамна самом деле несколько «предметов», но я вставил только один из них, чтобы дать вам конкретный пример.Для каждого элемента я хочу извлечь заголовок и ISBN.Как мне сделать это с имеющимся у меня объектом etree?
<ItemSearchResponse><Items><Item><ItemAttributes><Title>I want this info</Title></ItemAttributes></Item></Items></ItemSearchResponse
<ItemSearchResponse><Items><Item><ItemAttributes><ISBN>And I want this info</ISBN></ItemAttributes></Item></Items></ItemSearchResponse
По сути, я не знаю, как пройти по дереву, используя мой объект etree, и я хочу узнать, как это сделать.
Редактировать 1: Я пытаюсь следующий код:
tree = etree.fromstring(response)
for item in tree.iterfind(".//"+AMAZON_NS+"ItemAttributes"):
print(item)
print(item.items()) # Apparently, there is nothing in item.items()
for key, value in item.items():
print(key)
print(value)
Но я получаю следующий вывод: http://dpaste.com/287496/
Я добавил печать (item.items()), и это просто кажется пустым списком.Хотя каждый элемент является элементом, но по какой-то причине у него нет элементов.
Редактировать 2: я могу использовать следующий код для получения нужной информации, но, похоже, lxml должен иметь более простой способ... (этот способ не кажется эффективным):
for item in tree.iterfind(".//"+AMAZON_NS+"ItemAttributes"):
title_text = ""
author_text = ""
isbn_text = ""
for isbn in item.iterfind(".//"+AMAZON_NS+"ISBN"):
isbn_text = isbn.text
for title in item.iterfind(".//"+AMAZON_NS+"Title"):
title_text = title.text
for author in item.iterfind(".//"+AMAZON_NS+"Author"):
author_text = author.text
print(title_text + " by " + author_text + " has ISBN: " + isbn_text)