2011-07-29 131 views
5

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

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

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

+0

您是否想要创建XML的方法或执行XSLT的方法? – atrain

+0

我不太确定...我有点迷路,也许两个? – Nayish

+0

数据是否以XML格式存储? – atrain

回答

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); 
+0

太棒了!这工作完美,thanx – Nayish

+0

不客气。 – BalusC

1

根据你的XML将会有多复杂和大,我会建议两个选项。对于小而简单的结构,Java的DOM实现(Document)就足够了。

如果您的XML更详细,我会考虑JAXB。这样做的好处是有一些工具可以从XML模式(XSD)自动创建Java类。所以你必须首先将你的DTD转换为XSD,但这不应该是一个问题。最终得到纯数据传输对象(具有相应XML元素的值的getter/setter的纯对象)以及正确解析/编码和设置名称空间。这非常方便,但对简单的XML结构也可能有点矫枉过正。

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

+0

API是什么意思?其他库?然后我有好消息,这些技术都有内置实现随标准JDK提供。 – emboss

0

Apache XMLBeans是串行化XML和XML的很好的解决方案。这里有您需要做什么:

这里使用类是一个例子Ant脚本来使用XMLBeans创建类:

<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> 

现在您有您可以使用干净的代码来创建存储在数据库中的数据的XML漂亮的Java类。使用BalusC的XSLT答案。