使用带有if条件的import minidom解析xml

时间:2014-04-01 05:17:00

标签: python xml parsing minidom

 <Game:quit>

           <Game:AnimalSet AnimalSet="Name" />
           <Game:Value Value="Lion" />

       </Game:quit>
       <Game:quit>

           <Game:AnimalSet AnimalSet="Name" />
           <Game:Value Value="Tiger" />

       </Game:quit>
       <Game:quit>

           <Game:AnimalSet AnimalSet="Name" />
           <Game:Value Value="Leopard" />

       </Game:quit>
       <Game:quit>

           <Game:DimensionSet AnimalSet="Name" />
           <Game:Value Value="Elephant" />

       </Game:quit>

   <Game:quit>

          <Game:AnimalSet AnimalSet="Place" />
          <Game:Value Value="USA" />

这是我主要关注的sample.xml中的xml块。我想使用from xml.dom import minidom导入库以这种方式解析这个xml,如果条件和AnimalSet值是&#34; Name&#34;它将存储/附加其值为#14; Lion&#34;,&#34; Tiger&#34;,&#34; Leopard&#34;和&#34; elephant&#34;在一些清单中。 elif如果AnimalSet是&#34; Place&#34 ;,它应该存储/附加&#34; USA&#34;进入另一个名单。

我只是在开头只关注代码,如果有人帮我开始,我会非常感激。

有任何帮助吗?如果还有什么不清楚,请提出问题。感谢

1 个答案:

答案 0 :(得分:0)

这看起来像XPath的任务,所以作为minidom的替代品,您可以使用ElementTree,其findall方法可以找到具有Value属性的所有元素。

import xml.etree.ElementTree as ET

doc = ET.parse(path_to_xml_file)
values = doc.findall('.//*[@Value]')
print [value.get('Value') for value in values]

对于Python 2.6.6,ElementTree无法查找属性,因此您必须使用其他内容。文件开头必须有xmlns:Game伪属性;将其值复制到xmlns变量中,然后尝试以下操作。

import xml.etree.ElementTree as ET

xmlns =  # the value of xmlns:Game
doc = ET.parse(path)
values = doc.findall('.//Game:Value', namespaces={'Game': xmlns})
print [value.get('Value') for value in values]