使用Python在Appengine中解析xml的最佳方法
我正在连接到isbndb.com获取图书信息,他们的回复如下:使用Python在Appengine中解析xml的最佳方法,python,google-app-engine,xml-deserialization,Python,Google App Engine,Xml Deserialization,我正在连接到isbndb.com获取图书信息,他们的回复如下: <?xml version="1.0" encoding="UTF-8"?> <ISBNdb server_time="2005-02-25T23:03:41"> <BookList total_results="1" page_size="10" page_number="1" shown_results="1"> <BookData book_id="somebook" isbn=
<?xml version="1.0" encoding="UTF-8"?>
<ISBNdb server_time="2005-02-25T23:03:41">
<BookList total_results="1" page_size="10" page_number="1" shown_results="1">
<BookData book_id="somebook" isbn="0123456789">
<Title>Interesting Book</Title>
<TitleLong>Interesting Book: Read it or else..</TitleLong>
<AuthorsText>John Doe</AuthorsText>
<PublisherText>Acme Publishing</PublisherText>
</BookData>
</BookList>
</ISBNdb>
有趣的书
有趣的书:读一读,否则。。
无名氏
Acme出版公司
使用appengine(Python)将这些数据转换为对象的最佳方法是什么
我需要isbn编号(BookData中的一个标记),但我还需要BookData所有子级的内容(与标记相反)。有一个名为BeautifulSoup的优秀Python模块。使用BeautifulStoneSoup类进行XML解析 更多信息:使用etree:)
>xml=”“”
...
...
...
…有趣的书
…有趣的书:要么读,要么。。
…无名氏
…Acme出版公司
...
...
... """
从xml.etree导入ElementTree作为etree
tree=etree.fromstring(xml)
>>>对于树中的图书.iterfind('BookList/BookData'):
... 打印'isbn:',book.attrib['isbn']
... 对于book.getchildren()中的子对象:
... 打印'%s:'%child.tag,child.text
...
国际标准书号:0123456789
书名:有趣的书
标题:有趣的书:读一读,否则。。
作者文本:约翰·多伊
PublisherText:Acme Publishing
>>>
瞧
实际上,我正在尝试将xml数据转换为Book.isbn和Book.title等对象,但我会接受,因为我认为我不清楚,而且这可能是我能得到的最接近的对象。我将把一个开关盒(使用if-else)插入for循环,生成一个这样的对象,如果你有更好的想法,请分享。你可以这样做:类书(对象):def u init u(self,isbn,title,title_long):self.isbn=isbn self.title=title self.title#long=title#long#etc.books=[]用于树中的书。iterfind('BookList/BookData'):book_obj=book(book.attrib['isbn',book.find('title')、book.find('TitleLong'))#等books.add(book#obj)非常感谢-顺便说一下,您的上述代码需要进行一些修改,我不确定我的appengine是否很旧,但iterfind仅在Python 2.7中,并且在我使用时不在那里。发现它在子级中迭代,而不需要获取子级。但是非常感谢,Python2.7中添加了iterfind()
方法。盖伊。要使@virhilo的解决方案在2.5中起作用,请将iterfind()
替换为findall()
。我使用find(),因为api在按isbn搜索时最多返回一个值(因为它是唯一的)。谢谢
>>> xml = """<?xml version="1.0" encoding="UTF-8"?>
... <ISBNdb server_time="2005-02-25T23:03:41">
... <BookList total_results="1" page_size="10" page_number="1" shown_results="1">
... <BookData book_id="somebook" isbn="0123456789">
... <Title>Interesting Book</Title>
... <TitleLong>Interesting Book: Read it or else..</TitleLong>
... <AuthorsText>John Doe</AuthorsText>
... <PublisherText>Acme Publishing</PublisherText>
... </BookData>
... </BookList>
... </ISBNdb>"""
from xml.etree import ElementTree as etree
tree = etree.fromstring(xml)
>>> for book in tree.iterfind('BookList/BookData'):
... print 'isbn:', book.attrib['isbn']
... for child in book.getchildren():
... print '%s :' % child.tag, child.text
...
isbn: 0123456789
Title : Interesting Book
TitleLong : Interesting Book: Read it or else..
AuthorsText : John Doe
PublisherText : Acme Publishing
>>>
voila;)