2011-07-29 101 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答案。