首页 > 解决方案 > 使用 Python ElementTree 在 XML 中查找兄弟元素文本值

问题描述

我正在将 Python 3.7 与 Anaconda 一起使用,并且我试图从带有 text = CX.PAIR1.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

我在这里做错了什么?

标签: pythonxmlelementtree

解决方案


下面:(不需要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

推荐阅读