我想解析嵌套元素。我不介意使用XPath或Element。例如,我想打印值的有幾個是在:查找元素和打印值
>>> root[0][0][0][0][0].tag
'{http://www.domain.com/somepath/Schema}element'
>>> root[0][0][0][0][0].text
'findme'
什麼是理想的方法通過XML文檔進行迭代,分析,並打印element
值?這是我正在使用的模式的一個例子。
<?xml version="1.0" encoding="UTF-8"?>
<data xsi:schemaLocation="http://www.domain.com/somepath/Schema file.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.domain.com/somepath/Schema">
<one stuff0="" stuff1="">
<two stuff0="" stuff1="">
<three>
<four stuff0="234234" stuff1="234324">
<element>findme</element>
</four>
<four stuff0="234234" stuff1="234324">
<element>findme2</element>
</four>
<four stuff0="234234" stuff1="234324">
<element>findme3</element>
</four>
</three>
</two>
</one>
<one stuff0="" stuff1="">
<two stuff0="" stuff1="">
<three>
<four stuff0="234234" stuff1="234324">
<element>findme4</element>
</four>
<four stuff0="234234" stuff1="234324">
<element>findme5</element>
</four>
<four stuff0="234234" stuff1="234324">
<element>findme6</element>
</four>
</three>
</two>
</one>
</data>
我試過以下,雖然沒有結果返回。即使這樣做了工作,也不會看到,雖然下根元素1 [0] 1 [0] [0]等:
>>> for tagname in root[0][0][1][0][0].findall('element'):
... name = tree.get('element')
... print name
...
>>>
每本question,我自己也嘗試沒有成功如下:
發現>>> for elem in doc.findall('one/two/three/four'):
... print value.get('stuff1'), elem.text
...
>>>
問題:
該元件不被讀取由於缺乏命名空間規範的,我讀Need Help using XPath in ElementTree後得知。因此,下面的示例:
>>> import xml.etree.cElementTree as ET
>>> for event, element in ET.iterparse("schema.xml"):
... if element.tag == "{http://www.domain.com/somepath/Schema}element":
... print element.text
...
findme
findme2
findme3
findme4
findme5
findme6
您鏈接到的任何一個庫都可以。 – Patashu 2013-03-28 03:36:52
我建議['cElementTree'](http://effbot.org/zone/celementtree.htm)通過'elementtree'模塊。它是經過編譯的C代碼,因此運行速度更快,使用更少的內存,但與'elementtree'具有非常類似的接口。 – 2013-03-28 03:45:39