使用Python从xml文件获取子元素值

2022-07-06 12:31:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用Python从.xml文件中提取/修改子元素。为此,我使用xml.etree.ElementTree文件但是我没有从我的代码中得到想要的输出。我需要从.xml文件中提取“deployment”(在本例中为xyz1000\u Test\u v1)下的元素“name”:

<?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 DeploymentName in root.iter('{http://www.test.com/esc/esc}name'):
    print(DeploymentName.text)
    name.text="New deplaoyment name"

但是,在代码中,我得到了“deployment”、“network”和“subnet”下的元素值。如何访问特定元素?提前谢谢。你知道吗

更新:

试图从“network”元素中提取“name”,我有这个代码。不幸的是,它没有给我预期的答案:

for network in root.findall('{http://www.test.com/esc/esc}network'):
    name = network.find('name').text
    print(name)

Tags: 文件代码nametestcomhttp元素wwwdeploymentnetworkxmlettenantsubnetesc
1条回答
网友
1楼 ·

文档中的所有元素都绑定到同一命名空间,network元素不是根的直接子元素。你知道吗

findall()一起使用:

for network in root.findall('.//{http://www.test.com/esc/esc}network'):
    name = network.find('{http://www.test.com/esc/esc}name')

或者使用iter()

for network in root.iter('{http://www.test.com/esc/esc}network'):
    name = network.find('{http://www.test.com/esc/esc}name')
    if name is not None:  # Avoid "'NoneType' object has no attribute 'text'"
        name.text= 'new name'