我有一个大型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文件以进行更改。
感谢您的帮助和建议!
答案 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"?>