5

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' –
4

4 に答える 4

8

この関数は、その名前が示すように、一致する要素を 1 つだけではなく、すべてfindall検索します。

したがって、この後:

elem = tree.findall('bbox')

elems のリストですElement。そして、他のリストと同様に、これは次のとおりです。

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'
于 2013-07-02T22:55:53.953 に答える
3

ファイルが更新されていない場合は、ファイルを保存していない可能性が高いため、tree.writeメソッドを使用してそれを行うことができます。

tree.write('output.xml')
于 2013-07-02T23:15:05.190 に答える
0

すべての境界ボックスのテキストを「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'
于 2013-07-02T22:56:05.857 に答える