我是一个编程新手,很少使用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()并从根目录向后工作。这里是我的密码:
但我被困在第五步。如何获得要迭代的访问列表?抱歉,如果这是一个非常愚蠢的问题,但我已经搜索了高和低的答案,我向你保证!我已经将代码简化为下面需要修复的部分的一个简单示例:
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
但我得到的唯一结果是: 病人 病人 下面的标签都没有。有什么想法吗?
您可以直接在元素“element”下遍历所有“visit”标记,如下所示:
您可以找到元素的第一个直接子元素,它与特定的标记匹配:
看起来您必须首先找到“visits”元素,它是“visit”的父元素,然后遍历其“visit”子元素。把这些放在一起你会得到这样的东西:
一般来说,查看xml.etree.ElementTree文档中的“查找感兴趣的元素”部分:http://docs.python.org/2/library/xml.etree.elementtree.html#finding-interesting-elements
可以使用CssSelector从Patient元素获取所需的节点:
您也可以这样做,以获得patientCode标签和SWOL28标签 然后可以使用
element.text
访问和修改元素的文本这是未经测试的应该是相当接近你想要的。
相关问题 更多 >
编程相关推荐