Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python从xml文件获取元素值_Python_Xml_Elementtree - Fatal编程技术网

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

使用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

我需要使用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>
        <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"