首页 > 解决方案 > 使用 Python 从 xml 文件中获取元素值

问题描述

我需要使用 Python 从 .xml 文件中提取/修改元素。为此,我正在使用 xml.etree.ElementTree 但我没有从我的代码中获得所需的输出。我需要从 .xml 文件中提取元素“地址”(在本例中为 10.25.0.0):

    <?xml version="1.0" encoding="utf-8"?>
<esc
    xmlns="http://www.test.com/esc/esc">
    <tenants>
        <tenant>
            <name>esc</name>
            <deployments>
                <deployment>
                    <name>xyz1000_Test_v1</name>
                    <networks>
                        <network>
                            <name>tenant_1</name>
                            <admin_state>true</admin_state>
                            <subnet>
                                <name>tenant_1_sub</name>
                                <ipversion>ipv4</ipversion>
                                **<address>10.25.0.0</address>**
                            </subnet>
                        </network>
                        <network> .....

我正在使用的代码如下:

import xml.etree.ElementTree as ET
tree = ET.parse('csr1kv_file.xml')
root = tree.getroot()
ET.register_namespace("","http://www.test.com/esc/esc")

for subnet in root.iter('address'):
    print (subnet)

在代码中我没有得到任何错误也没有值(10.25.0.0 根据需要)。有人可以给我一个想法吗?

标签: pythonxmlelementtree

解决方案


我知道这可能不是你所期望的,但你总是可以这样尝试:

with open('csr1kv_file.xml') as f:
     address = str(f.read()).split("<address>")[1].split("</address>")[0]

编辑:我在这里回答,评论部分很难处理

如果你想用别的东西改变 <address> 的值,你可以尝试:

    with open('csr1kv_file.xml') as f:
        address = str(f.read()).split("<address>")[1].split("</address>")[0]
        f_update = str(f.read()).replace("<address>" + str(address) + "</address>", "<address> whatever_address_you_want </address>")

    with open('csr1kv_file.xml', 'w') as f2:
        f2.write(f_update)

编辑编号 2: 使用您提供的示例数据,这个在我的机器上正常工作:

with open('csr1kv_file.xml') as f:
    full = f.read()
    address = str(full).split("<address>")[1].split("</address>")[0]    

f.close()

f_update = str(full).replace("<address>" + str(address) + "</address>","<address>whatever_ip</address>")

with open('csr1kv_file.xml', 'w') as f2:
    f2.write(f_update)

f2.close()

推荐阅读