python中的解析器XML

时间:2014-04-22 11:09:37

标签: python xml

我有一些像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更好地帮助我?

1 个答案:

答案 0 :(得分:3)

更好地使用xml.etree.ElementTree,它具有更多pythonic语法。通过root.findtext('team_name')获取team_name的文本,或使用root.finditer('definitions')迭代所有定义。