我在從XML樹中檢索信息時遇到問題。Python和libxml2:如何使用XPATH在XML節點中迭代
我的XML具有這種形狀:
<?xml version="1.0"?>
<records xmlns="http://www.mysyte.com/foo">
<record>
<id>first</id>
<name>john</name>
<papers>
<paper>john_1</paper>
<paper>john_2</paper>
</papers>
</record>
<record>
<id>second</id>
<name>mike</name>
<papers>
<paper>mike_a</paper>
<paper>mike_b</paper>
</papers>
</record>
<record>
<id>third</id>
<name>albert</name>
<papers>
<paper>paper of al</paper>
<paper>other paper</paper>
</papers>
</record>
</records>
我想要做的是萃取,如後續數據的元組:
[{'code': 'first', 'name': 'john'},
{'code': 'second', 'name': 'mike'},
{'code': 'third', 'name': 'albert'}]
現在,我寫了這個Python代碼:
try:
doc = libxml2.parseDoc(xml)
except (libxml2.parserError, TypeError):
print "Problems loading XML"
ctxt = doc.xpathNewContext()
ctxt.xpathRegisterNs("pre", "http://www.mysyte.com/foo")
record_nodes = ctxt.xpathEval('/pre:records/pre:record')
for record_node in record_nodes:
id = record_node.xpathEval('id')[0].content
name = record_node.xpathEval('name')[0].content
ret_list.append({'code': id, 'name': name})
我的問題是,我沒有任何結果,我的印象是我做錯了XPATH w如果我在節點上迭代。
我也試圖與這些XPath的ID和名稱:
/id
/name
/record/id
/record/name
/pre:id
/pre:name
等,但任何結果(順便說一句,如果我使用前綴的子查詢我有一個錯誤)。
有什麼想法?
對此沒有評論?這確實是一種「直接在libxml2中執行」的方法。 – mzjn 2010-08-11 17:59:07
對不起!我忘了簽署這個答案作爲最好的答案!它實際上以我想要的方式工作。謝謝! – 2010-10-19 14:52:42