使用 Python 从 xml 文件获取子元素值
Get child element value from xml file using Python
我需要使用 Python 从 .xml 文件中 extract/modify 一个子元素。为此,我使用 xml.etree.ElementTree 但我没有从我的代码中获得所需的输出。我需要从 .xml 文件中提取 "deployment" 正下方的元素 "name"(在本例中为 xyz1000_Test_v1):
<?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)
文档中的所有元素都绑定到同一个命名空间,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'
我需要使用 Python 从 .xml 文件中 extract/modify 一个子元素。为此,我使用 xml.etree.ElementTree 但我没有从我的代码中获得所需的输出。我需要从 .xml 文件中提取 "deployment" 正下方的元素 "name"(在本例中为 xyz1000_Test_v1):
<?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)
文档中的所有元素都绑定到同一个命名空间,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'