解析浮点数和返回路径,但某些属性值除外

时间:2015-03-03 15:59:35

标签: python xml parsing attributes

我正在尝试解析深度嵌套的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>

我想返回22.304e+015055.2e-015及其paths,即省略不完全数字的文字,例如english1.21$/kg4.1$/kg。同时还限制属性month=05month=0614110059900

从上一篇文章中我得到以下内容,它将获取所有可浮动数字的路径。

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函数时,它不起作用。我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为你几乎就在那里。

如果你添加:

if 'month' in node.attrib:
    if node.attrib['month'] in ['05', '06']:
        return nums

nums=[]行之后,它应该完全符合您的要求。 在执行extend

之前添加它非常重要