我是一名编程新手,很少使用python,所以请在尝试解释我要做的事情时忍受:)
我有以下XML:
<?xml version = "1.0" encoding = "utf-8"?> <Patients> <Patient> <PatientCharacteristics> <patientCode>3</patientCode> </PatientCharacteristics> <Visits> <Visit> <DAS> <CRP>14</CRP> <ESR/> <Joints> <DAS_PROFILE>28/28</DAS_PROFILE> <SWOL28>20</SWOL28> <TEN28>20</TEN28> </Joints> </DAS> <VisitDate>2010-02-17</VisitDate> </Visit> <Visit> <DAS> <CRP>10</CRP> <ESR/> <Joints> <DAS_PROFILE>28/28</DAS_PROFILE> <SWOL28>15</SWOL28> <TEN28>20</TEN28> </Joints> </DAS> <VisitDate>2010-02-10</VisitDate> </Visit> </Visits> </Patient> <Patient> <PatientCharacteristics> <patientCode>3</patientCode> </PatientCharacteristics> <Visits> <Visit> <DAS> <CRP>14</CRP> <ESR/> <Joints> <DAS_PROFILE>28/28</DAS_PROFILE> <SWOL28>34</SWOL28> <TEN28>0</TEN28> </Joints> </DAS> <VisitDate>2010-08-17</VisitDate> </Visit> <Visit> <DAS> <CRP>10</CRP> <ESR/> <Joints> <DAS_PROFILE>28/28</DAS_PROFILE> <SWOL28></SWOL28> <TEN28>2</TEN28> </Joints> </DAS> <VisitDate>2010-07-10</VisitDate> </Visit> <Visit> <DAS> <CRP>9</CRP> <ESR/> <Joints> <DAS_PROFILE>28/28</DAS_PROFILE> <SWOL28>56</SWOL28> <TEN28>6</TEN28> </Joints> </DAS> <VisitDate>2009-07-10</VisitDate> </Visit> </Visits> </Patient> </Patients>
我要做的就是更新某些“ SWOL28”值,如果它们与我存储在文本文件中的PatientCode和VisitDate匹配。据我了解,elementtree不包含父引用,就好像它包含父引用一样,我可以只从根目录使用findall()并从那里反向进行工作。现在的样子是我的伪代码:
但是,我陷入了第5步。如何获得迭代访问的清单?道歉,如果这是一个非常愚蠢的问题,但我向您高低地寻找答案,我向您保证!我已将代码简化为以下需要修复的部分的裸露示例:
import xml.etree.ElementTree as ET tree = ET.parse('DB3.xml') root = tree.getroot() for child in root: # THIS GETS ME ALL THE PATIENT ATTRIBUTES print child.tag for x in child/Visit: # THIS IS WHAT I CANNOT FIND THE CORRECT SYNTAX FOR # I WOULD THEN PERFORM STEPS 6, 7 AND 8 HERE
我将非常感谢任何人对此提出的任何想法。我当然不是编程自然的人!
预先感谢莎拉
编辑1:
根据以下SVK的建议,我尝试了以下操作:
import xml.etree.ElementTree as ET tree = ET.parse('Untitled.xml') root = tree.getroot() for child in root: print child.tag child.find( "visits" ) for x in child.iter("visit"): print x.tag, x.text
但是我得到的唯一输出是:患者患者,没有较低的标签。有任何想法吗?
这未经测试,应该与您想要的相当接近。
for patient in root: patient_code = patient.find('PatientCharacteristics').find('patientCode') if patient_code.text == code: for visit in patient.find('Visits'): visit_date = visit.find('VisitDate') if visit_date.text == date: swol28 = visit.find('DAS').find('Joints').find('SWOL28') if swol28.text: visit.find('DAS').find('Joints').set('SWOL28', new_swol28)