将SQL结果集转换为XML
我正在寻找一种可以将SQL结果集序列化和/或者转换为XML的工具。从SQL结果集中简化XML生成很简单而且很琐碎,但这不是我所需要的。
该解决方案必须与数据库无关,并且仅接受常规SQL查询结果(不使用db xml支持)。该工具的一个特殊挑战是提供与基于行的结果中的任何模式匹配的嵌套XML。中间步骤太慢且浪费,这需要一步完成。没有RS-> object-> XML,最好没有RS-> XML-> XSLT-> XML。由于结果集较大,XML较大,因此它必须支持流传输。
那里有什么吗?
解决方案
回答
从来没听说过。我只会自己动手。这并不难,也许是这样的:
#!/usr/bin/env jruby import java.sql.DriverManager # TODO some magic to load the driver conn = DriverManager.getConnection(ARGV[0], ARGV[1], ARGV[2]) res = conn.executeQuery ARGV[3] puts "<result>" meta = res.meta_data while res.next puts "<row>" for n in 1..meta.column_count column = meta.getColumnName n puts "<#{column}>#{res.getString(n)}</#{column}" end puts "</row>" end puts "</result>"
免责声明:我只是将所有内容整理了一下,甚至不假装它可行。 :-)
回答
dbunit(www.dbunit.org)确实从sql转换为xml,反之亦然;我们也许可以根据需要进行更多修改。
回答
在.NET中,我们可以从任何来源填充数据集,然后可以将XML格式的数据集写到磁盘上,带或者不带模式。我不能说大型电视机的性能如何。简单的 :)
回答
对于SQL Server,我们确实应该考虑在查询中使用FOR XML构造。
如果我们使用的是.Net,则只需使用DataAdapter来填充数据集。将其放入数据集中后,只需使用其.WriteXML()方法即可。这打破了DB-> object-> XML规则,但这实际上是完成事情的方式。我们也许可以使用数据读取器解决问题,但是我对此表示怀疑。
回答
从技术上讲,将结果集转换为XML文件很简单,不需要任何工具,除非我们需要转换数据结构以适合特定的导出模式。通常,结果集获取XML文件的顶级元素,然后生成许多包含属性的记录元素,这些属性实际上是记录的字段。
例如,当涉及到Java时,我们只需要适当的JDBC驱动程序即可与我们选择的DBMS接口,以解决数据库独立性要求(通常由DBMS供应商提供),以及几行代码来读取结果集并打印每个记录,每个字段的XML字符串。在我看来,对于普通的Java开发人员而言,这并不是一件艰巨的任务。
无论如何,我们陈述的目的越具体,得到的答案就越具体。
回答
在Java中,我们可以仅用xml数据填充一个对象(例如实体bean),然后使用XMLEncoder将其转换为xml。从那里,我们可以使用XSLT进行进一步的转换,也可以使用XMLDecoder将其带回对象。
加的特Greetz
PS:有关对象到XML部分的示例,请参见http://ghads.wordpress.com/2008/09/16/java-to-xml-to-java/。 :JDBC,Groovy数据集或者GORM。 Apache Common Beans可能会通过类似于反射的方法来帮助填充JavaBeans。