我的Java应用程序中要求基于XSD架构生成XML。生成的XML将包含将由SQL查询返回的数据。 任何使用过的库都应该与JBoss EAP6和旧版本兼容。
有人建议使用Apache Xalan libs,但我找不到一个好的起点。
有没有人做过类似的事情?
答案 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代码...”。然后会出现一个对话框,选择输出路径等。您可以在下图中看到:
使用哪种工具无关紧要。最后,他们将为您的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();
}
希望这会有所帮助,
祝你好运。