Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have an xml file with point coordinate like this

<vertex x="15" y="15.2"/>

I would like to scale these coordinate like

<vertex x="15*factor" y="15.2*factor"/>

with factor=0.2 (a number)

I was thinking about using re. Something like:

 re.sub(r'(x="[0-9]"', X, X*factor, data)

I prefer not two loop over all lines, and split and so one...

since I'm reading the file as one string

f = open(filename)
data = f.read()
f.close()

EDIT:

More context

<polygon>
    <vertex x="-15" y="15"/>
    <vertex x="-15" y="-15"/>
</polygon>
<polygon>
    <vertex x="15" y="-15"/>
    <vertex x="15" y="15"/>
</polygon>
<polygon>
    <vertex x="-15" y="-15"/>
    <vertex x="15" y="-15"/>
</polygon>

Output for factor=0.1

<polygon>
    <vertex x="-1.5" y="1.5"/>
    <vertex x="-1.5" y="-1.5"/>
</polygon>
<polygon>
    <vertex x="1.5" y="-1.5"/>
    <vertex x="1.5" y="1.5"/>
</polygon>
<polygon>
    <vertex x="-1.5" y="-1.5"/>
    <vertex x="1.5" y="-1.5"/>
</polygon>

Any ideas?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
134 views
Welcome To Ask or Share your Answers For Others

1 Answer

Here

import xml.etree.ElementTree as ET


xml = '''<r><polygon>
    <vertex x="-15" y="15"/>
    <vertex x="-15" y="-15"/>
</polygon>
<polygon>
    <vertex x="15" y="-15"/>
    <vertex x="15" y="15"/>
</polygon>
<polygon>
    <vertex x="-15" y="-15"/>
    <vertex x="15" y="-15"/>
</polygon></r>'''


def scale(factor):
    root = ET.fromstring(xml)
    vertex_lst = root.findall('.//vertex')
    for vertex in vertex_lst:
        for attr in ['x','y']:
            vertex.attrib[attr] = str(int(vertex.attrib[attr]) * factor)
    ET.dump(root)


scale(0.1)

output

<r><polygon>
    <vertex x="-1.5" y="1.5" />
    <vertex x="-1.5" y="-1.5" />
</polygon>
<polygon>
    <vertex x="1.5" y="-1.5" />
    <vertex x="1.5" y="1.5" />
</polygon>
<polygon>
    <vertex x="-1.5" y="-1.5" />
    <vertex x="1.5" y="-1.5" />
</polygon></r>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...