Java中的动态XML创建

时间:2011-07-29 14:31:59

标签: java xml servlets xslt

我正在尝试动态地在Java中创建XML文件以显示时间表。我为我的XML文件创建了一个DTD,我有一个我想用来转换XML的XSL文件。我不确切知道如何继续。

到目前为止我尝试过的是点击一个按钮调用Servlet,它生成XML文件内容的字符串(将XML的动态部分插入到String中。我现在有一个包含内容的String我现在想要使用我服务器上的XSL文件转换XML文件,并在调用Servlet的页面中显示结果(通过AJAX执行此操作)。

我不确定我是否在这个方向,也许我甚至不应该从一开始就以String形式创建XML代码。所以我的问题是,我如何从这里继续?如何使用XSL文件转换XML字符串,并将其作为对AJAX调用的响应发送,以便将生成的代码植入页面?或者,如果这不是这样做的,如何以不同的方式创建动态XML文件以产生相同的结果?

3 个答案:

答案 0 :(得分:5)

您可以使用JAXP。它是标准Java SE API的一部分。

StringReader xmlInput = new StringReader(xmlStringWhichYouHaveCreated);
InputStream xslInput = getServletContext().getResourceAsStream("file.xsl"); // Or wherever it is. As long as you've it as an InputStream, it's fine.

Source xmlSource = new StreamSource(xmlInput);
Source xslSource = new StreamSource(xslInput);
Result xmlResult = new StreamResult(response.getOutputStream()); // XML result will be written to HTTP response.

Transformer transformer = TransformerFactory.newInstance().newTransformer(xslSource);
transformer.transform(xmlSource, xmlResult);

答案 1 :(得分:1)

根据XML的复杂程度和大小,我建议两种选择。对于小而简单的结构,Java的DOM实现(Document)就足够了。

如果您的XML更精细,我会调查JAXB。这样做的好处是有一些工具可以从XML模式(XSD)自动创建Java类。因此,您必须先将DTD转换为XSD,但这应该不是问题。您最终得到了普通数据传输对象(具有相应XML元素值的getter / setter的普通对象),并且正确地为您完成了解析/编码以及设置命名空间。它非常方便,但对于简单的XML结构也可能有些过分。

在这两种情况下,您最终都会得到一个Document实例,您最终可以使用JAXP进行转换。

答案 2 :(得分:0)

Apache XMLBeans是一种很好的与XML序列化的解决方案。这是你需要做的:

以下是使用XMLBeans创建类的ANT脚本示例:

<project name="my_project" basedir="..">
<property name="my_project.project.path" value="${basedir}"/>
<property name="xbean.dir" value="C:/lib/xmlbeans-2.2.0/lib" />
<path id="classpath">
    <fileset dir="${xbean.dir}" includes="**/*.jar" />  
</path> 
<taskdef name="xmlbean" classname="org.apache.xmlbeans.impl.tool.XMLBean" classpathref="classpath" />
<xmlbean schema="${testing_project.project.path}/my.xsd" srcgendir="${my_project.project.path}/src-tms-template-filter-fields" classgendir="${my_project.project.path}/bin">
    <classpath><path refid="classpath" /></classpath>
</xmlbean>

现在,您将拥有可用于干净代码的优秀Java类,以便根据存储在数据库中的数据创建XML。使用BalusC对XSLT的回答。