Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python在Appengine中解析xml的最佳方法_Python_Google App Engine_Xml Deserialization - Fatal编程技术网

使用Python在Appengine中解析xml的最佳方法

使用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=

我正在连接到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="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;)