我有一个文件(几GB),包含数据
<doc>
<a1>11111</a1>
<b1>22222</b1>
<c1>33333</c1>
</doc>
我想转换为另一种XML
<doc2>
<f1>11111</f1>
<f2>33333</f2>
</doc2>
是否可以使用自定义编写的程序?
谢谢,
答案 0 :(得分:1)
这将是一个非常简单的XSLT,因此您只需要使用您的语言中存在的任何正常应用XSLT的方式。 XSLT是自定义的,虽然没有真正的答案“我可以在没有自定义实现的情况下执行此自定义要求吗?”
答案 1 :(得分:1)
只需使用XSLT - 它就是它的设计目标。 W3Schools对它做了很好的tutorial。
我不知道你的意思是“没有编程”。你想要一个GUI工具吗?使用XSLT会更容易。
答案 2 :(得分:1)
我也会使用XSLT,但也会抛出StAX解析器,因为它可能会在大型XML文件上提供更好的性能。
答案 3 :(得分:0)
使用SAX或类似解析器的最有效方法。例如,带有expat的Python随Python一起发布:
#-------------------------------------------------------------------------------
# Author: nad2000 AT google DOT com
#
# Saple demonstrating how to trasform:
#
# <doc>
# <a1>11111</a1>
# <b1>22222</b1>
# <c1>33333</c1>
# </doc>
#
# into:
#
# <doc2>
# <f1>11111</f1>
# <f2>33333</f2>
# </doc2>
#-------------------------------------------------------------------------------
#!/usr/bin/env python
from xml.parsers import expat
class DocParser:
def __init__(self):
self._parser = expat.ParserCreate()
self._parser.StartElementHandler = self.start
self._parser.EndElementHandler = self.end
self._parser.CharacterDataHandler = self.data
def feedFile(self, fileName):
file= open( fileName, mode='rb')
self._parser.ParseFile( file)
file.close()
def close(self):
del self._parser # get rid of circular references
def start(self, tag, attrs):
if tag == 'doc':
print ('<?xml version="1.0" encoding="UTF-8"?>')
print ("<doc2>")
def end(self, tag):
if tag == 'a1':
print ("\t<f1>%s</f1>" % self._data)
elif tag == 'c1':
print ("\t<f2>%s</f2>" % self._data)
elif tag == 'doc':
print ("</doc2>")
def data(self, data):
self._data = data
def main():
p = DocParser()
p.feedFile( "sample.xml")
p.close()
pass
if __name__ == '__main__':
main()