使用Python ElementTree查找XML中的同级元素文本值



我在Anaconda中使用Python 3.7,我试图从text=CX.AIR1.BORROWER.FICO元素后面的XML元素中获取文本值。因此,在这种情况下,我希望返回'779'。

从下面的XML段可以看出,这些标记不是唯一的,也没有名称或属性,因此只能使用包含的文本来定位数据。

<CustomField>
<id>CustomField/63</id>
<fieldName>CX.WLS.RATETYPE</fieldName>
<stringValue>FIX30</stringValue>
</CustomField>
<CustomField>
<id>CustomField/64</id>
<fieldName>CX.PAIR1.BORROWER.FICO</fieldName>
<stringValue>779</stringValue>
<numericValue>779.0</numericValue>
</CustomField>
<CustomField>
<id>CustomField/65</id>
<fieldName>CX.PAIRS16</fieldName>
<stringValue>779</stringValue>
<numericValue>779.0</numericValue>
</CustomField>

我尝试过各种形式的

Borrower_FICO = root.find('.//*[fieldName = "CX.PAIR1.BORROWER.FICO"]/following-sibling::node()')

和。。

Borrower_FICO = root.find('.//*[text() = "CX.PAIR1.BORROWER.FICO"]/following-sibling::node()')

但看不到将数据拉入我的变量Borrower_FICO

我做错了什么?

ElementTree不支持

following-sibling。不过它确实适用于lxm。

我转换为lxml,并使用一个循环使其工作:

for elem in root.iter(): 
if elem.text == "CX.PAIR1.BORROWER.FICO" :  
Borrower_FICO = elem.getnext().text

下面:(不需要lxml(

import xml.etree.ElementTree as ET
xml = '''<r><CustomField>
<id>CustomField/63</id>
<fieldName>CX.WLS.RATETYPE</fieldName>
<stringValue>FIX30</stringValue>
</CustomField>
<CustomField>
<id>CustomField/64</id>
<fieldName>CX.PAIR1.BORROWER.FICO</fieldName>
<stringValue>779</stringValue>
<numericValue>779.0</numericValue>
</CustomField>
<CustomField>
<id>CustomField/65</id>
<fieldName>CX.PAIRS16</fieldName>
<stringValue>779</stringValue>
<numericValue>779.0</numericValue>
</CustomField></r>'''

root = ET.fromstring(xml)
entry = root.find(".//CustomField/[fieldName='CX.PAIR1.BORROWER.FICO']")
print(entry.find('stringValue').text)

输出:

779

最新更新