【问题标题】:Creating XML from XPATH从 XPATH 创建 XML
【发布时间】:2014-11-14 02:30:51
【问题描述】:

我是 xml 和 XSL 的新手,使用旧平台...
我正在寻找一种从 XPATH 创建 XML 的解决方案。正好看到这个帖子How to Generate an XML File from a set of XPath Expressions? 这对我帮助很大。
与“评论”部分下讨论的请求类似,我试图将整个 XSLT 作为字符串传递,并使用 Saxon 将结果作为刺回接收。以字符串形式接收结果,没有问题。但是当将 XSL 作为字符串传递时,它会抱怨“document()”,它是 document('')" /> 的一部分。
错误是“SXXP0003:XML 解析器报告的错误:prolog 中不允许内容。” 我的基本要求是我应该能够将 XSL(整个文件或“vPop”部分)作为字符串传递,并且应该在另一个字符串中接收结果而不涉及任何文件。这样我可以提高性能并使其具有通用性,以便我们商店中不知道如何处理 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 字符串与之前的帖子相同。

【问题讨论】:

  • 您确实意识到“从通过 XPath 检索的数据创建 XML”正是 XSLT 和 XQuery 的用途,对吧?

标签: java xml xslt xpath xquery


【解决方案1】:

当您调用 document('') 时,它会将 '' 视为要根据样式表的基本 URI 解析的相对 URI 引用。如果样式表的基本 URI 未知,这将不起作用,当您将其作为包装了没有 systemId 的 StringReader 的 StreamSource 提供时就是这种情况。

在 Saxon 的情况下,document('') 实际上需要重新读取样式表。它不会在运行时保留源文件以防万一。因此,您需要 (a) 提供一个 URI 作为 StreamSource 上的 systemId 属性(任何 URI 都可以,它实际上不会被读取),并且 (b) 提供一个 URIResolver 来解析对 document('' 的调用) 并提供原始字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 2013-04-27
    • 2014-06-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2014-12-05
    相关资源
    最近更新 更多