2014-11-14 78 views
0

我是一個帶有xml和XSL的新蜜蜂,與傳統平臺一起工作...
我正在尋找一種解決方案來從XPATH創建XML。發生了看到這個職位How to Generate an XML File from a set of XPath Expressions? 這幫了我很多。
與「評論」部分中討論的請求類似,我試圖將整個XSLT作爲字符串傳遞,並使用Saxon接收結果作爲反饋。以字符串形式接收結果,沒有問題。但是,當將XSL作爲字符串傳遞時,它會抱怨「document()」,它是< xsl:variable name =「vStylesheet」select =「」document('')「/>的一部分。
錯誤是「SXXP0003:XML解析器報告的錯誤:內容不被允許在prolog中。」 我的基本要求是我應該能夠將XSL(整個文件或「vPop」部分)作爲字符串傳遞,並且應該以另一個字符串的形式接收結果而不涉及任何文件。這樣我可以提高性能,並使其通用的,所以,任何人都在我們的商店,誰不知道如何處理XML仍然可以產生一個...從XPATH創建XML

我的Java代碼看起來像..

public static String simpleTransform(final String xsltStr) { 

    String strResult = ""; 

    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    String tempXMLStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<OpnXMLTAG>Dummy</OpnXMLTAG>"; 

    try { 
     StringWriter writer = new StringWriter(); 
     StreamResult result = new StreamResult(writer); 
     StreamSource XSLSource = new StreamSource(new StringReader(xsltStr)); 

     Transformer transformer = tFactory.newTransformer(XSLSource); 

     transformer.transform(new StreamSource(new StringReader(tempXMLStr)), result); 

     strResult = writer.toString(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return strResult; 

} 

我傳遞的XSLT字符串與之前的帖子是一樣的。

+0

您意識到「從通過XPath檢索的數據創建XML」正是XSLT和XQuery的用處,對嗎? – keshlam

回答

0

當您調用document('')時,它會將''視爲一個相對URI引用,以針對樣式表的基本URI進行解析。如果樣式表的基本URI是未知的,這將不起作用,當您將它作爲包裝StringReader且沒有systemId的StreamSource提供時,情況就是如此。

在Saxon的情況下,文檔('')實際上需要重新讀取樣式表。它不會在運行時保存源文件,以防萬一需要。因此,您需要(a)在StreamSource上提供一個URI作爲systemId屬性(任何URI都會執行,實際上不會被讀取),並且(b)提供一個URIResolver來解析文檔上的調用(''' )並提供原始字符串。