簡體   English   中英

從XPATH創建XML

[英]Creating XML from XPATH

我是使用xml和XSL的新手,可以使用舊版平台...
我正在尋找從XPATH創建XML的解決方案。 碰巧看到這篇文章如何從一組XPath表達式生成XML文件? 這對我很有幫助。
與“注釋”部分中討論的請求類似,我試圖將整個XSLT作為字符串傳遞,並使用Saxon接收結果作為字符串。 接收結果為字符串,沒有問題。 但是當將XSL作為字符串傳遞時,它抱怨“ document()”,它是<xsl:variable name =“ vStylesheet” select =“ document('') ” />的一部分。
錯誤為“ SXXP0003:XML解析器報告錯誤:序言中不允許內容。” 我的基本要求是我應該能夠將XSL(整個文件或“ vPop”部分)作為字符串傳遞,並且應該在不涉及任何文件的情況下在另一個字符串中接收結果。 這樣,我可以提高性能並使它通用,這樣我們商店中任何不知道如何處理XML的人仍然可以生成一個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字符串與之前的文章相同。

當您調用document('')時,它將''作為要相對於樣式表的基本URI解析的相對URI引用。 如果樣式表的基本URI未知,則此方法將不起作用,當您將其作為StreamSource提供(包裝不帶SystemId的StringReader時)時,情況就是如此。

對於Saxon,document('')實際上需要重新讀取樣式表。 它不會在運行時保留源文件,以防萬一。 因此,您需要(a)提供URI作為StreamSource上的systemId屬性(任何URI都會提供,實際上不會被讀取),以及(b)提供URIResolver來解決對document('' )並提供原始字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM