使用Python从xml文件获取元素值
我需要使用Python从.xml文件中提取/修改一个元素。为此,我使用了xml.etree.ElementTree,但我没有从代码中获得所需的输出。我需要从.xml文件中提取元素“address”(在本例中为10.25.0.0):使用Python从xml文件获取元素值,python,xml,elementtree,Python,Xml,Elementtree,我需要使用Python从.xml文件中提取/修改一个元素。为此,我使用了xml.etree.ElementTree,但我没有从代码中获得所需的输出。我需要从.xml文件中提取元素“address”(在本例中为10.25.0.0): <?xml version="1.0" encoding="utf-8"?> <esc xmlns="http://www.test.com/esc/esc"> <tenants> <t
<?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> .....
从代码中我没有得到任何错误和值(根据需要10.25.0.0)。有人能给我一个主意吗?我知道这可能不是你所期望的,但你总是可以这样尝试:
with open('csr1kv_file.xml') as f:
address = str(f.read()).split("<address>")[1].split("</address>")[0]
以open('csr1kv_file.xml')作为f的:
地址=str(f.read()).split(“”[1]。split(“”[0]
编辑:我在这里回答,评论部分很难处理
如果要使用其他内容更改值,可以尝试:
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)
以open('csr1kv_file.xml')作为f的:
地址=str(f.read()).split(“”[1]。split(“”[0]
f\u update=str(f.read())。替换(“+str(address)+”,“任意地址”)
打开('csr1kv_file.xml','w')作为f2:
f2.写入(f_更新)
编辑编号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()
以open('csr1kv_file.xml')作为f的:
full=f.read()
地址=str(完整)。拆分(“”[1]。拆分(“”[0]
f、 关闭()
f_update=str(完整)。替换(“+str(地址)+”,“任意ip”)
打开('csr1kv_file.xml','w')作为f2:
f2.写入(f_更新)
f2.关闭()
在迭代或搜索XML文档时无效。该函数仅在序列化(写入文件)时适用
换衣服
for subnet in root.iter('address'):
到
输出:
<Element '{http://www.test.com/esc/esc}address' at 0x030F3CF0>
(and possibly more address elements)
它实际上对纪尧姆很有用。谢谢如果我想修改“address”中的值怎么办?我该怎么做?我已经编辑了我的答案,让我知道它是否符合您的需要谢谢Guillaume的更新,但是更改部分对我不起作用。它没有给出任何错误,但没有修改任何内容。糟糕,我再次更新了它,现在应该可以正常工作了;)将XML文件视为纯文本文件是脆弱且容易出错的。XML是一种结构化格式,最好使用适当的XML工具(如ElementTree)进行处理。谢谢!如果我需要将元素“name”从“deployment”更改为“deployment”,该怎么办?正如您在代码中看到的,元素“名称”位于“部署”和“子网”下。当我在root.iter({}name'):”中应用“for DeploymentName”时,它显然改变了四个元素的名称。原来的问题已经回答了。谢谢。我已经发布了新的一个,因为即使使用“find”函数,我仍然无法访问其他子元素。
for subnet in root.iter('{http://www.test.com/esc/esc}address'):
<Element '{http://www.test.com/esc/esc}address' at 0x030F3CF0>
(and possibly more address elements)
subnet.text = "whatever"