我有一些像XML中的下一个数据库,我试图用Python 2.7解析它:
<team>
<generator>
<team_name>TeamMaster</team_name>
<team_year>2000</team_year>
<team_city>NewYork</team_city>
</generator>
<players>
<definition name="John V." number="4" age="25">
<criteria position="fow" side="right">
<criterion website="www.johnV.com" version="1" result="true"/>
</criteria>
<object debut="2003" version="3" flag="complete">
<history item_ref="team34"/>
<history item_ref="mainteam"/>
</definition>
<definition name="Emma" number="2" age="19">
<criteria position="mid" side="left">
<criterion website="www.emma.net" version="7" result="true"/>
</criteria>
<object debut="2008" version="1" flag="complete">
<history item_ref="newteam"/>
<history item_ref="youngteam"/>
<history item_ref="oldteam"/>
</definition>
</players>
</team>
使用这个小脚本,我可以轻松解析第一部分&#34; generator&#34;从我的xml中,我知道包含的所有元素:
from xml.dom.minidom import parseString
mydb = {
"team_name": ,
"team_year": ,
"team_data":
}
file = open('mydb.xml','r')
data = file.read()
file.close()
dom = parseString(data)
#retrieve the first xml tag (<tag>data</tag>) that the parser finds with name tagName:
xmlTag = dom.getElementsByTagName('team_name')[0].toxml()
#strip off the tag (<tag>data</tag> ---> data):
xmlData=xmlTag.replace('<team_name>','').replace('</team_name>','')
mydb["team_name"] = xmlData # TeamMaster
但是当我试图解析&#34;球员时,我真正的问题出现了。元素,其中属性出现在&#34;定义&#34; &#34;历史&#34;中的未知数量的元素。 也许还有另一个模块比minidon更好地帮助我?
答案 0 :(得分:3)
更好地使用xml.etree.ElementTree,它具有更多pythonic语法。通过root.findtext('team_name')
获取team_name的文本,或使用root.finditer('definitions')
迭代所有定义。