2013-09-30 95 views
0

我在我的java web應用程序(mvc範例)中使用eXist-db。 我想從數據庫中檢索xml數據,然後用XSLT轉換來轉換這個xml。這是我經歷的步驟。如何在Java中處理XML從xml數據庫中檢索數據

  1. 我查詢數據庫,我得到一個XMLResource,或ResourceSet作爲結果。

  2. 現在我必須將從數據庫中檢索到的XML(如XMLResource)轉換爲XSLT轉換。

    由於XSLT轉換(使用javax.xml.transform.Transformer)需要一個XML源代碼作爲參數,我得從XMLResource轉換到StreamSource的

但是,這是處理xml資源的最佳方式嗎?我應該把我的XMLResource轉換成其他的東西嗎?

回答

1

XMLResource提供了一個getContentAsSAX method將XML直接提供給SAX ContentHandler。而javax.xml.transform提供了TransformerHandler的概念,將Transformer公開爲SAX ContentHandler。所以,你可以使用這兩個組合:

Source stylesheet = ... // however you're loading your stylesheet 
TransformerHandler handler = ((SAXTransformerFactory)transformerFactory) 
           .newTransformerHandler(stylesheet); 
Result result = ... // StreamResult, DOMResult etc. 
handler.setResult(result); 
xmlResource.getContentAsSAX(handler); 

// result now holds the result of the transformation 

對於相反的方向,如果你需要一個XMLResource充當目標轉型的,那麼你可以使用SAXResult與正常Transformer

Source stylesheet = ... // however you're loading your stylesheet 
Transformer transformer = transformerFactory.newTransformer(stylesheet); 
Source source = ... // StreamSource, DOMSource, etc. 
Result result = new SAXResult(xmlResource.setContentAsSAX()); 
transformer.transform(source, result);