我應該使用PyXML還是標準庫中的內容?如何使用Django/Python從RESTful Web服務中使用XML?
3
A
回答
10
ElementTree的被提供作爲標準Python庫的一部分。 ElementTree的是純粹的Python和cElementTree是更快的C實現:
# Try to use the C implementation first, falling back to python
try:
from xml.etree import cElementTree as ElementTree
except ImportError, e:
from xml.etree import ElementTree
下面是一個例子使用,在那裏我從一個RESTful Web服務消費的xml:
def find(*args, **kwargs):
"""Find a book in the collection specified"""
search_args = [('access_key', api_key),]
if not is_valid_collection(kwargs['collection']):
return None
kwargs.pop('collection')
for key in kwargs:
# Only the first keword is honored
if kwargs[key]:
search_args.append(('index1', key))
search_args.append(('value1', kwargs[key]))
break
url = urllib.basejoin(api_url, '%s.xml' % 'books')
data = urllib.urlencode(search_args)
req = urllib2.urlopen(url, data)
rdata = []
chunk = 'xx'
while chunk:
chunk = req.read()
if chunk:
rdata.append(chunk)
tree = ElementTree.fromstring(''.join(rdata))
results = []
for i, elem in enumerate(tree.getiterator('BookData')):
results.append(
{'isbn': elem.get('isbn'),
'isbn13': elem.get('isbn13'),
'title': elem.find('Title').text,
'author': elem.find('AuthorsText').text,
'publisher': elem.find('PublisherText').text,}
)
return results
3
我總是傾向於在可能的情況下使用標準庫。 ElementTree在pythonistas中是衆所周知的,所以你應該能夠找到大量的例子。它的一部分也在C中進行了優化,所以速度非常快。
0
還有BeautifulSoup,其中有一些API可能更喜歡。這裏是你如何能提取已經從Twitter的公共時間軸收藏所有鳴叫一個例子:
from BeautifulSoup import BeautifulStoneSoup
import urllib
url = urllib.urlopen('http://twitter.com/statuses/public_timeline.xml').read()
favorited = []
soup = BeautifulStoneSoup(url)
statuses = soup.findAll('status')
for status in statuses:
if status.find('favorited').contents != [u'false']:
favorited.append(status)
相關問題
- 1. JAVA :: RESTful Web服務使用XML文件
- 2. 使用RESTful XML Web服務API
- 3. 如何使用RESTful Web服務?
- 4. 如何從Android調用RESTful Web服務?
- 5. 如何從android調用RESTful Web服務?
- 6. 從ASP.NET中使用XML-SOAP Web服務
- 7. 使用jQuery調用Restful Web服務ajax
- 8. Restful web服務xml更新
- 9. IOS如何使用RESTFUL API從Web服務檢索數據
- 10. 如何在IntelliJ IDEA中使用「Test restful web service」選項測試RESTful Web服務
- 11. 認證使用RESTful Web服務
- 12. 使用Apache Shiro保護RESTful Web服務
- 13. 使用C#的restful Web服務
- 14. 使用jUnit測試Spring Restful web服務
- 15. 使用codeigniter的RESTFul web服務
- 16. 如何使用asp.net Web API開發RESTful Web服務器
- 17. 如何從asp.net中的另一個restful服務使用restful服務?
- 18. 使用REST XML Web服務
- 19. 如何在Matlab中使用RESTful Web服務
- 20. 如何在android中使用PHP restful web服務?
- 21. 如何在我的JSF項目中使用RESTful Web服務?
- 22. 如何在NativeScript中連接Web Service使用API RESTful服務?
- 23. 如何使用RESTlet在RESTful Web服務中實施「會話」?
- 24. 使用XML使用Spring Web服務
- 25. 如何使用JBoss AS上的java restful web服務啓用CORS
- 26. 我如何飲用使用HTTP POST RESTful Web服務在.NET 2.0
- 27. 如何使用jQuery ajax調用RESTful php web服務?
- 28. 如何使用TIBCO GI調用RESTful Web服務?
- 29. 如何使用Apache的駱駝來調用RESTful Web服務
- 30. 如何使用jQuery對本地Web服務進行RESTful調用
vezult,怎麼來的,有時你使用elem.get(),有時你使用elem.find()的文本? – rick 2009-05-07 00:52:18
@rick:elem.get()獲取元素屬性的值,而elem.find()則搜索elem元素中包含的元素。 – vezult 2009-05-08 02:49:56