我使用ElementTree从通过requests模块返回的一些XML中获取各种元素标记.在<callvariables>个标签里,我有很多<CallVariable>套.

             <callvariables>
                <CallVariable>
                    <name>callVariable1</name>
                    <value>Client</value>
                </CallVariable>
                <CallVariable>
                    <name>callVariable2</name>
                    <value>1234567890</value>
                </CallVariable>
                <CallVariable>
                    <name>callVariable3</name>
                    <value>Illinois</value>
                </CallVariable>
                  ........

我可以使用以下命令从XML中提取全部namevalue

for child in root.findall('.//CallVariable'):
    name = child.find('.//name')
    value = child.find('.//value')
    print(name.text, value.text)

但有没有办法在name的基础上拉出value呢?例如,搜索callVariable1并返回Client

推荐答案

ElementTree是XPath support is limited,但使用CallVariablepredicate来测试name的值就足够简单了.

例如...

import xml.etree.ElementTree as ET

xml = """
<callvariables>
    <CallVariable>
        <name>callVariable1</name>
        <value>Client</value>
    </CallVariable>
    <CallVariable>
        <name>callVariable2</name>
        <value>1234567890</value>
    </CallVariable>
    <CallVariable>
        <name>callVariable3</name>
        <value>Illinois</value>
    </CallVariable>
</callvariables>
"""

root = ET.fromstring(xml)

target_elem = root.find(".//CallVariable[name='callVariable1']/value")

print(target_elem.text)

fingerprint .

Client

另一个例子是修改for,以便更容易地看到您只需要添加谓词……

for child in root.findall('.//CallVariable[name="callVariable1"]'):
    name = child.find('name')
    value = child.find('value')
    print(name.text, value.text)

fingerprint .

callVariable1 Client

Python相关问答推荐

拆分pandas列并创建包含这些拆分值计数的新列

在Pandas框架中截短至固定数量的列

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

使用LineConnection动画1D数据

将特定列信息移动到当前行下的新行

时间序列分解

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

scikit-learn导入无法导入名称METRIC_MAPPING64'

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

django禁止直接分配到多对多集合的前端.使用user.set()

对所有子图应用相同的轴格式

需要帮助重新调整python fill_between与数据点

如何使regex代码只适用于空的目标单元格

AES—256—CBC加密在Python和PHP中返回不同的结果,HELPPP

处理具有多个独立头的CSV文件

在极点中读取、扫描和接收有什么不同?

Pandas数据框上的滚动平均值,其中平均值的中心基于另一数据框的时间

如何在Python中解析特定的文本,这些文本包含了同一行中的所有内容,

以极轴表示的行数表达式?

如何在Pandas中用迭代器求一个序列的平均值?