在Python中替换XML元素

2024-06-10 16:04:44 发布

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

我试图用一组新的坐标替换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'

我的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>

尝试了各种方法来做我在这里找到的事情,但似乎没有效果。谢谢。

我收到的错误如下:

line 20, in <module> elem.txt = '40.5,41.5,-12.0,-1.2' AttributeError: 'list' object has no attribute 'txt' –

Tags: importtxttreesourcedbserverportxml
3条回答

如果您的文件没有更新,很可能是因为您没有保存它,那么您可以使用^{}方法来执行此操作。

tree.write('output.xml')

顾名思义,^{}函数可以找到所有匹配元素,而不仅仅是一个。

所以,在这之后:

elem = tree.findall('bbox')

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

elem.txt = '40.5,41.5,-12.0,-1.2'

会给你一个错误:

AttributeError: 'list' object has no attribute 'txt'

如果要对列表中的每个成员执行操作,必须循环:

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

如果要将所有边框的文本替换为“40.5,41.5,-12.0,-1.2”,请尝试以下操作

bboxes = tree.xpath('//bbox')
for bbox in bboxes:
    bbox.text= '40.5,41.5,-12.0,-1.2'

相关问题 更多 >