我是一名编程新手,很少使用 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() 并从那里向后工作。就目前而言,这是我的伪代码:
- 对于文本文件中的每一行:
- 将 Visit_Date Patient_Code New_SWOL28 放入变量中
- 对于每个患者元素:
- 如果患者代码 = Patient_Code
- 对于每个访问元素:
- 如果 VisitDate = Visit_Date
- 如果此访问存在 SWOL28 元素
- 将 SWOL28 更新为 New_SWOL28
但我被困在第 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
但我得到的唯一输出是:Patient Patient 并且没有较低的标签。有任何想法吗?