2014-11-14 79 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来解析文档上的调用(''' )并提供原始字符串。