使用Python更新现有XML文档

时间:2015-06-12 18:01:02

标签: python xml

我有一个大型XML文件,其结构大致如下:

<GROUNDTRUTH>
  <thing fileName="1" attrib="2">
    <SUBSUB moreStuff="12" otherStuff="13"/>
  </thing>
  <thing fileName="2" attrib="2">
    <SUBSUB moreStuff="12" otherStuff="13"/>
  </thing>
  <thing fileName="3" attrib="2">
    <SUBSUB moreStuff="12" otherStuff="13"/>
  </thing>
</GROUNDTRUTH>

我不认为我在这个问题的原始帖子中已经足够清楚了。我有一个名为GROUNDTRUTH的xml文档,其中有几千个“东西”。我想通过文件名搜索文档中的所有内容,然后更改属性。因此,如果我在搜索fileName="2",我会将其属性更改为attrib=x。对于某些thing,也许我会降到sub级并更改moreStuff

我的计划是在csv文件中存储我需要更改的“事物”的名称,以及我想要将“attrib”的值更改为的内容。什么功能或模块将提供这种功能?或者我只是错过了一个简单/明显的方法?最后,我希望有一个工作脚本,它将带有thing标识符的csv文件和要更新的值,并获取xml文件以进行更改。

感谢您的帮助和建议!

1 个答案:

答案 0 :(得分:1)

首先,您可以使用xslt样式表将原始xml文件转换为输出的xml文件,该样式表可以以任何方式,形状或形式修改xml文件,例如修改,重新构造,重新排序属性请注意,xsl是一种声明性的专用语言,用于转换和呈现XML文档。

然后,您可以使用Python的lxml库来运行转换:

#!/usr/bin/python
import lxml.etree as ET

dom = ET.parse('originalfile.xml')
xslt = ET.parse('transformfile.xsl')
transform = ET.XSLT(xslt)
newdom = transform(dom)

tree_out = ET.tostring(newdom, encoding='UTF-8', pretty_print=True)

xmlfile = open('finalfile.xml','ab')
xmlfile.write(tree_out)
xmlfile.close()

顺便说一句,PHP,Java,C,VB或几乎任何语言,甚至你的日常浏览器都可以运行转换!要让浏览器运行它,只需在标题中添加样式表:

<?xml-stylesheet type="text/xsl" href="transformfile.xsl"?>