Python元素树xml解析器:如何迭代子节点以改变属性?

时间:2015-08-12 21:50:46

标签: python xml parsing xml-parsing elementtree

我收到了一个XML文件,并被要求更改填充颜色。我一直在尝试使用Element Tree,每次尝试访问节点时,都会遇到语法错误。我已经复制了下面需要解析的XML文件,然后在下面的代码中需要更改的内容:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="300px"
 height="300px" viewBox="0 0 300 300" enable-background="new 0 0 300 300" xml:space="preserve">
<g id="Shapes">
<g id="RootTip">
    <path fill="none" d="M98.178,143.456l112.03-0.079l-5.458,56.235c0,0-1.472,7.203-2.704,7.552s1.086,1.377,1.086,1.377
        l-2.537,12.993l1.751,0.441l-5.252,13.787c0,0,0,6.126,0.219,7.658S196,244.079,196,244.079s-6.784,13.565-8.097,14.879
        s-9.846,8.752-11.597,9.628s-10.941,4.158-10.941,4.158l0.209,1.312L159,273.619V275c0,0-13.547,1.683-17.486-0.943
        s-12.035-7.439-14.879-10.284s-10.722-13.13-12.254-17.287s-7.44-18.38-7.002-20.568s1.094-3.501,1.094-3.501l-3.282-12.254
        l-3.72-32.386l-0.875-5.688l-0.875-9.409L98.178,143.456z"/>
    </g>
</g>

我需要将路径填充更改为任何颜色,例如&#34; blue&#34;或&#34;红色&#34;。

我在网上使用了这个教程,并尝试将其作为我的第一步:

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
for child in root:
    print child.tag, child.attrib 

但是,我一直得到这个语法消息??!

Traceback (most recent call last):
File "<string>", line 2, in <fragment>
Syntax Error: print child.tag, child.attrib: <string>, line 2, pos 15

有谁知道如何解决这个问题?我是编程新手,所以任何反馈都会非常感激。谢谢!

2 个答案:

答案 0 :(得分:0)

我尝试过你的XML文件,但我遇到的问题是它不是有效的XML。 <svg>错过</svg>元素或仅<svg ... />

它会显示不同的错误消息,但我无法看到您的代码有任何问题,这对我也有用。

答案 1 :(得分:0)

问题在于您的XML&#39;文件。

我认为您正在查看this tutorial - 请参阅此XML文件的外观:

<?xml version="1.0"?>
<data>
 <country name="Liechtenstein">
    <rank>1</rank>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E"/>
    <neighbor name="Switzerland" direction="W"/>
 </country>
 <country name="Singapore">
    <rank>4</rank>
    <year>2011</year>
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
 </country>
 <country name="Panama">
    <rank>68</rank>
    <year>2011</year>
    <gdppc>13600</gdppc>
    <neighbor name="Costa Rica" direction="W"/>
    <neighbor name="Colombia" direction="E"/>
 </country>
</data>

文件中的第一行声明了类型,说明它是哪个XML版本<?xml version="1.0"?>

您的文件首先声明它是SVG图形文件:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "

将其与this example进行比较,您可以看到<?xml version行必须先出现。

由于您刚刚开始,最好使用所提供的数据完成您正在使用的教程,然后在其工作后将其调整到您的文件。