你給出XML源代碼包含一些錯誤;我固定的,看我下面的源:
from lxml import etree
source = """
<root>
<scene name="scene1">
<view ath="0" atv="10" />
<image url="img1.jgp" />
<hotspot name="hot1" />
</scene>
<scene name="scene2">
<view ath="20" atv="10" />
<image url="img2.jgp" />
<hotspot name="hot2" />
</scene>
</root>
"""
解析這個源,將創建一個etree:(對於源從一個文件來,用etree.parse()
代替)
tree = etree.fromstring(source)
現在,您可以通過正確訪問tree
來瀏覽已解析的XML。我最喜歡這樣的方式是用XPath進行導航(掌握這些超出你的問題的範圍):
allViews = tree.xpath('//root/scene/view')
for view in allViews:
print view.attrib
這將打印的XPath找到的每個視圖標籤的所有XML屬性:
{'atv': '10', 'ath': '0'}
{'atv': '10', 'ath': '20'}
當然,你也可以訪問視圖元素的其他屬性,比如嵌入文本(當然這裏是空的)或者它們的子元素(子元素)(當然,在你的例子中他們也沒有子元素)。
你的問題的措辭表明,你可能沒有建立一個事實,即這個view
對象確實是「整個視圖標記」的理解。您可以詢問view
對象的標籤(view
),其屬性(參見上文),其內容(view.text
)及其子元素(view.getchildren()
,但沒有)。
您可以通過調用etree.tostring(view)
將解析的XML結構轉換回ASCII表示形式;這將返回一個字符串,如'<view ath="20" atv="10"/>\n '
。在大多數情況下,你不會這樣做。
您也可以訪問元素元素來查看孩子:
print tree.getchildren()[1].getchildren()[0].attrib
這將打印XML第0孩子的第一個孩子tree
元素的屬性(一view
)(一scene
) :
{'atv': '10', 'ath': '20'}
解析文件用'lxml.etree; parse',使用XPath表達式來搜索您元件(多個),請參見:[XPath和XSLT與LXML](http://lxml.de/xpathxslt.html#the-xpath-method)。用lxml.etree.tostring序列化結果。 –
注意:我編輯了你的XML樣本,因爲它是無效的。等待審查的同行... –