2013-04-04 82 views
0

我收到一個HTTP POST。發送一個參數:xmlDjango解析來自POST的XML

它包含一個xml文檔。這個文件的格式是:

<?xml version="1.1" encoding="ISO-8859-1"?> 
    <delivery_receipt> 
    <version>1.0</version> 
    <status>Delivered</status> 
</delivery_receipt> 

我需要從POST得到什麼在<status>,我該如何解析參數,並得到了「狀態」?

更新....

如果request.POST:

from lxml.cssselect import CSSSelector 
from lxml.etree import fromstring 

h = fromstring(request.POST['xml']) 
h.cssselect('delivery_reciept status').text_content() 

我不知道,request.POST [ 'XML']將工作壽

+0

https://groups.google.com/forum/?fromgroups=#!topic/django-users/ULtbRwf2cdo – catherine 2013-04-04 15:31:53

+0

你嘗試自己做任何事在問之前? – wRAR 2013-04-04 15:39:58

+0

我期待知道從哪裏開始@wRAR lxml看起來很完美 – Prometheus 2013-04-04 15:41:36

回答

2

你可以(並且應該)將CSS選擇器與XML文檔一起使用,並授予您爲解析XML文檔執行相對簡單的任務。 CSS選擇器清晰,易於讀寫,並且比XPATH查詢更具表現力。

我建議安裝lxml,並使用它們的cssselect功能。

你最終的結果可能是這樣的:

>>> h = fromstring("""<?xml version="1.1" encoding="ISO-8859-1"?> 
    <delivery_receipt> 
     <version>1.0</version> 
     <status>Delivered</status> 
    </delivery_receipt> """) 
>>> h.cssselect('delivery_reciept status').text_content() 
+0

我添加了Windows的lxml鏈接,因爲很難設置。這個庫的Linux版本就像'pip install lxml'一樣簡單。 – Droogans 2013-04-04 15:35:15

+0

所以會是fromstring(request.POST [xml])? – Prometheus 2013-04-04 15:40:24

+0

是的,沒錯。這個項目中解析多少xml? lxml是一個相當大的庫,對於一個小小的'ol xml解析來說可能不值得。 Python在xml解析庫([minidom])中(http://docs.python.org/2/library/xml.dom.minidom.html)內置了一個(稍微尷尬的)。 – Droogans 2013-04-04 15:48:10