我正在尝试解析深度嵌套的XML文件的浮点数,并返回除某些属性值之外的此节点的路径。例如。鉴于下面的文件,我想返回所有浮点数但排除某些属性,例如month = 05&一个月= 06,
<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<language>english</language>
<currency>1.21$/kg</currency>
<gdppc month="06">141100</gdppc>
<gdpnp month="10">2.304e+0150</gdpnp>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<language>english</language>
<currency>4.1$/kg</currency>
<gdppc month="05">59900</gdppc>
<gdpnp month="08">5.2e-015</gdpnp>
<neighbor name="Malaysia" direction="N"/>
</country>
我想返回2
,2.304e+0150
,5
和5.2e-015
及其paths
,即省略不完全数字的文字,例如english
,1.21$/kg
或4.1$/kg
。同时还限制属性month=05
和month=06
即141100
和59900
。
从上一篇文章中我得到以下内容,它将获取所有可浮动数字的路径。
def extractNumbers(path, node):
nums = []
path += '/' + node.tag
if 'name' in node.keys():
path += '=' + node.attrib['name']
try:
num = float(node.text)
nums.append( (path, num) )
except (ValueError, TypeError):
pass
for e in list(node):
nums.extend( extractNumbers(path, e) )
return nums
tree = ET.parse('jerry.xml')
nums = extractNumbers('', tree.getroot())
print len(nums)
print nums
如何为此添加属性限制?当我将node.attrib["month"] in ["05","06"]
添加到except函数时,它不起作用。我将不胜感激任何帮助。
答案 0 :(得分:1)
我认为你几乎就在那里。
如果你添加:
if 'month' in node.attrib:
if node.attrib['month'] in ['05', '06']:
return nums
在nums=[]
行之后,它应该完全符合您的要求。
在执行extend