[英]How to remove select characters from xml parse in python / django?
上下文
我正在處理django項目,我需要遍歷嵌套字典以打印值
這是字典:
{body {u'@ copyright':u'所有數據版權Unitrans ASUCD /戴維斯市2015。',u'predictions':{u'@ routeTitle':u'A',u'@ dirTitleBecauseNoPredictions':u'Outbound到El Cemonte',u'@ agencyTitle':u'Unitrans ASUCD /戴維斯市',u'@ stopTag':u'22258',u'@ stopTitle':u'Silo碼頭和哈林大廳(WB)', u'@ routeTag':u'A',u'message':[{u'@ text':u'周末服務於12月28日至30日星期一至星期三運行。',u'@ priority':u'正常'},{u'@ text':u'A行和Z行不在周末運行。 使用O線進行周末服務。',u'@ priority':u'Normal'}]}}}
我正在從以下URL解析字典: http : //webservices.nextbus.com/service/publicXMLFeed? command = predictions&a = unitrans&r =A& s= 22258
問題1
我在使用django模板標簽顯示帶有'@'的鍵的值時遇到麻煩
{% for i in data%}
{% i.@copyright %}
{% endfor %}
這給出了一個錯誤,指出無法解析余數。
問題2
其中一個值包含一個帶有方括號的嵌套字典
[{u'@ text':u'Weekend服務正在12月28日至30日的周一至周三運行。',u'@ priority':u'Normal'},{u'@ text':u'A行和Z線不在周末運行。 使用O線進行周末服務。',u'@ priority':u'Normal'}]
我不能使用for循環模板標簽來循環瀏覽
我想到的解決方案
為了解決這個問題並使它更簡單,我正在尋找從xml中刪除字符'@'
, '['
和']'
的方法,這將使我擁有一個更加簡單的字典,該字典很容易遍歷。
我的Python代碼現在在views.py中
import xmltodict
import requests
def prediction(request, line, s_id):
url = "http://webservices.nextbus.com/service/publicXMLFeed? command=predictions&a=unitrans&r=" + line + "&s=" + s_id
data = requests.get(url)
data = xmltodict.parse(data, dict_constructor=dict)
data_dict = {}
data_dict["data"] = data
return render(request, 'routes/predictions.html', data_dict)
我想在網頁預測中顯示的內容
Route Tag: A
Message : Weekend Service is running Monday-Wednesday Dec. 28-30.
The A-Line and Z-Line do not run on weekends. use O-Line for weekend service.
Priority: Normal
對於這個問題,我將不勝感激。 感謝您的時間。
在xmltodict中,“ @”符號用於指示xml節點的屬性,而“ [”和“]”用於定界本身就是值列表的元素值。 (在這里,它指示'message'值本身就是兩個消息對象的列表)。 您當然可以嘗試將dict作為原始文本閱讀,然后抓取所需的內容,但這並不會利用大多數人從一開始就將其導入的原因:組織數據並使其易於訪問。
無需抓取文本,您可以輕松地制作一個模板,該模板將從所需的字典中提取特定值。 您的數據字典應采用以下結構:
{
body:
{
u'@copyright': u'All data copyright Unitrans ASUCD/City of Davis 2015.',
u'predictions':
{
u'@routeTitle': u'A',
u'@dirTitleBecauseNoPredictions': u'Outbound to El Cemonte',
u'@agencyTitle': u'Unitrans ASUCD/City of Davis',
u'@stopTag': u'22258',
u'@stopTitle': u'Silo Terminal & Haring Hall (WB)',
u'@routeTag': u'A',
u'message':
[
{
u'@text': u'Weekend service is running Monday-Wednesday Dec. 28-30.',
u'@priority': u'Normal'
},
{
u'@text': u'The A-line and Z-line do not run on weekends. Use O-line for weekend service.',
u'@priority': u'Normal'
}
]
}
}
}
要獲得所需的輸出,請創建針對該數據量身定制的模板,然后直接插入所需的值。 像這樣:(抱歉,我不完全知道Django模板語法)
Route Tag: {{ data_dict.body.predictions.routeTitle }}
Messages :
<ul>
{% for msg in data_dict.body.predictions.message %}
<li>{{ msg.text }} (Priority: {{ msg.priority }})</li>
{% endfor %}
</ul>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.