用Python替换XML元素

Mog*_*ggy 3 python xml elementtree

我试图用一组新坐标替换bbox内的元素.

我的代码:

    # import element tree
    import xml.etree.ElementTree as ET 


    #import xml file
    tree = ET.parse('C:/highway.xml')
    root = tree.getroot()

    #replace bounding box with new coordinates

    elem = tree.findall('bbox')
    elem.txt = '40.5,41.5,-12.0,-1.2'
Run Code Online (Sandbox Code Playgroud)

我的xml文件:

   <geoEtl>
    <source>
        <server>localhost</server>
        <port>xxxx</port>
        <db>vxxx</db>
        <user>xxxx</user>
        <passwd>xxxx</passwd>
    </source>
    <targetDir>/home/firstuser/</targetDir>
    <bbox>-52.50,-1.9,52.45,-1.85</bbox>
    <extractions>
        <extraction>
            <table>geo_db_roads</table>
            <outputName>highways</outputName>
            <filter>highway = 'motorway'</filter>
            <geometry>way</geometry>
            <fields>
                <field>name</field>             
            </fields>
        </extraction>
    </extractions>
   </geoEtl>
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种各样的方法来做我在这里找到的东西,但它似乎没有起作用.谢谢.

我收到的错误如下:

line 20, in <module> elem.txt = '40.5,41.5,-12.0,-1.2' AttributeError: 'list' object has no attribute 'txt' –
Run Code Online (Sandbox Code Playgroud)

aba*_*ert 5

findall顾名思义,该函数可以找到所有匹配的元素,而不仅仅是一个元素.

所以,在此之后:

elem = tree.findall('bbox')
Run Code Online (Sandbox Code Playgroud)

elem是一个Elements 的列表.并且,与任何其他列表一样,这个:

elem.txt = '40.5,41.5,-12.0,-1.2'
Run Code Online (Sandbox Code Playgroud)

会给你一个错误:

AttributeError: 'list' object has no attribute 'txt'
Run Code Online (Sandbox Code Playgroud)

如果你想对列表的每个成员做一些事情,你必须循环它:

elems = tree.findall('bbox')
for elem in elems:
    elem.txt = '40.5,41.5,-12.0,-1.2'
Run Code Online (Sandbox Code Playgroud)

  • @Moggy:`ET.parse('C:/highway.xml')` 只是将文件解析为内存中的一棵树。如果要修改 XML 文件,则必须编辑树,然后_将其保存回文件_`。如果您想用新版本覆盖原始版本,您可以执行 `tree.write('C:/highway.xml')`。 (2认同)