0

以下は xml ファイルです: Results.xml

<?xml version="1.0" ?>
<Combinations>
    <Mode>PC</Mode>
    <Category>ADULT</Category>
    <Combination>
        <Parameter>
            <PEEP>1.0</PEEP>
            <Result>true</Result>
        </Parameter>
        <Parameter>
            <CMV_FREQ>4.0</CMV_FREQ>
            <Result>false</Result>
        </Parameter>
    </Combination>
</Combination>

Python コード:

import xml.etree.ElementTree as ET

tree = ET.parse('Results.xml')    
root = tree.getroot()

mode = root.find('Mode').text
category = root.find('Category').text
print mode, category

for combin in root.findall('Combination'):
    peep = rr = []
    for param in combin.getiterator('Parameter'):
    peep.append(((param.get('PEEP'), param.find('PEEP').text), param.find('Result').text))
    rr.append(((param.get('CMV_FREQ'), param.find('CMV_FREQ').text), param.find('Result').text))
    print peep, rr

エラー:

Traceback (most recent call last):
  File "/home/AlAhAb65/workspace/python_code/prac1.py", line 59, in <module>
    rr.append(((param.get('CMV_FREQ'), param.find('CMV_FREQ').text), param.find('Result').text))
AttributeError: 'NoneType' object has no attribute 'text'

基本的に、次のようにxmlタグから変数内に値を取得したい:

peep = ((PEEP, 1.0), true)        # I want to check the tag before enter value and corresponding true will be insert into variable
rr   = ((CMV_FREQ, 4.0), false)

この点で私を助けてください

4

1 に答える 1

0

問題は、最初のタグ内に CMV_FREQ がないため、使用しようとすると失敗することです。

>>> for combin in root.findall('Combination'):
...    for param in  combin.getiterator('Parameter'):
...        param.get('CMV_FREQ').text
... 
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
AttributeError: 'NoneType' object has no attribute 'text'

上記のものが必要な場合は、次のことを行う必要があります。

  for combin in root.findall('Combination'):
    peep = []
    rr = []
    print 1
    for param in combin.getiterator('Parameter'):
      if param.find('PEEP') is not None: ##This will check if PEEP tag exists
         peep.append(((param.get('PEEP'), param.find('PEEP').text), param.find('Result').text))
      elif  param.find('CMV_FREQ') is not None:##This will check if CMV_FREQ tag exists
         rr.append(((param.get('CMV_FREQ'), param.find('CMV_FREQ').text), param.find('Result').text))
    print peep, rr

別の問題 peep = rr = [] により peep == rr が作成されるため、rr を変更すると、コードをそのままにしておくと peep も更新され、結果は次のようになります。

[((None, '1.0'), 'true'), ((None, '4.0'), 'false')] [((None, '1.0'), 'true'), ((None, '4.0'), 'false')]

それ以外の:

[((None, '1.0'), 'true')] [((None, '4.0'), 'false')]
于 2013-04-25T17:05:37.520 に答える