使用xsd模式生成xml并输出sql查询

时间:2015-06-18 17:40:37

标签: java xml xsd

我的Java应用程序中要求基于XSD架构生成XML。生成的XML将包含将由SQL查询返回的数据。 任何使用过的库都应该与JBoss EAP6和旧版本兼容。

有人建议使用Apache Xalan libs,但我找不到一个好的起点。

有没有人做过类似的事情?

1 个答案:

答案 0 :(得分:0)

如果我是你,我会使用JAXB api根据sql查询的输出创建xml输出。 JAXB api是J2EE标准之一,它们是具有许多容器的最可能的兼容api。

我没有看到您的代码,但我建议采用以下解决方案:

您可以使用ORM框架或仅使用纯JDBC。将数据从DB提取到内存后,必须将它们保存在某些Bean类实例中。

另一方面,您应该为XSD生成映射类。这通常使用JAXB命令行工具或IDE工具(在后台使用该命令行工具)完成。我建议使用Intellij-Idea或Eclipse JAXB工具。

的Intellij: 例如,如果您有CustomerOrders.xsd文件,则可以将其放在包中,然后右键单击它,从webservices子菜单中选择“使用JAXB从xml模式生成Java代码...”。然后会出现一个对话框,选择输出路径等。您可以在下图中看到:

enter image description here

使用哪种工具无关紧要。最后,他们将为您的XSD映射创建一个或多个Java类。这些类必须存储在代码可以在运行时访问的包或文件夹中。然后,您唯一的工作就是将数据持有者bean实例转换为此生成的类的实例。之后,JAXB会在您通过api订购时将它们编组为XML格式的字符串或文件。

使用JAXB api的示例代码可能是这样的:

try 
{
    CustomerType data = new CustomerType(); // This is a mapping class generated by jaxb tools.
                                            // You should convert your fetched data from DB to this type.
                                            // This object is the root object of your xml output file. 
                                            // Maybe you have some other child level classes under this object
                                            //    which creates your nested tags of your output xml data.
    Marshaller marshaller = JAXBContext.newInstance().createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // this is for formatting the output xml data
    marshaller.marshal(data, new File("Wherever you want to save!"));
} 
catch (JAXBException e) 
{
    e.printStackTrace();
}

希望这会有所帮助,

祝你好运。