我是一名编程新手,很少使用Python,因此请耐心等待,因为我试图解释我是什么试图做:)Python版本2.7:XML ElementTree:如何遍历子元素的某些元素以便找到匹配
我有下面的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到变量
- 对于每一个病人元素:
- 如果patientCode = 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
但我得到的唯一输出是: 患者 患者 并且没有较低标记。有任何想法吗?
你似乎不有一个顶层标签,例如''您是否编辑过该文件,或者这是您的文档? –
MattH
2013-03-26 17:05:44
对不起,只是现在就把它加进去了。谢谢! – 2013-03-26 17:19:04
我会在这里使用'lxml'(与API兼容的库)并使用xpath表达式。使用正确的XPath表达式选择正确的访问非常简单。 – 2013-03-26 17:34:51