当前位置: 首页 > 面试题库 >

Saxon XSLT转换:转换期间失败时如何关闭输出流

贲宏硕
2023-03-14
问题内容

我想对多个输出文件进行XSLT转换。我在那里使用了“ xsl:result-document”。转换失败时,应删除所有输出文件。但是,如果“
xsl:result-document”创建的文档生成失败,则我的程序无法再删除该文档。我认为原因是“ xsl:result-
document”创建了一个不同的OutputStream。有谁知道如何关闭所有输出流?

编辑:我使用Saxon 9.5进行转换。

请参阅下面的源代码:

public void simpleTransform(String sourcePath, String xsltPath, String outputPath)
{  
String resultDir=outputPath+"/filename.html";
TransformerFactory tFactory = TransformerFactory.newInstance(); 
StreamSource ss = new StreamSource(new File(xsltPath));
StreamResult sr = new StreamResult(new File(resultDir));
Transformer transformer = tFactory.newTransformer(ss); 
try
{
    transformer.transform(new StreamSource(new File(sourcePath)), sr);  
    System.out.println("Transformation finished!"); 
}
catch (TransformerException te)
{
    try
    {
        System.out.println("Transformation failed! Trying to close Outputstreams...");
        sr.getOutputStream().flush();
        sr.getOutputStream().close();
        transformer.reset();
        System.out.println("Outputstream closed!");
        try
        {
            FileUtils.deleteDirectory(new File(tempDirPath));
            System.out.println("Files succesfully deleted!");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
}
}

问题答案:

我怀疑您发现了一个错误。我已经在这里记录了:请对其进行跟踪以寻求解决方案

https://saxonica.plan.io/issues/1857

您可以通过注册自己的OutputURIResolver(也许基于标准的)来解决该问题,该跟踪器可以跟踪所有打开的输出流,并可以由应用程序直接调用以最终关闭它们。



 类似资料:
  • 问题内容: 我有一个相当简单的分页查询,用于从表中获取行 该参数决定结果应按哪一列排序。 和都是日期时间字段。但是是varchar字段。 对于两个datetime字段,查询运行都很好,但是当出现以下错误时: “从字符串转换日期和/或时间时转换失败。” 我遇到的问题是我没有尝试转换任何东西吗? 问题答案: 您需要将您的语句划分为多个语句: 这是因为单个语句要求所有分支都具有兼容的数据类型。由于一个字

  • 是否可以转换写入JSON数据中的时间输出?我尝试在CloudTrail和SNS设置中搜索,但没有找到任何有关时间输出的信息。 流程:AWS CloudTrail Insight→ AWS CloudWatch事件→ AWS SNS→ Microsoft团队 样本输出 "Account_ID": "", "区域":"ap-东北方向-1", "Event_Type":"AwsCloudTrailIns

  • 问题内容: 我试图创建一个表,如下所示, 首先,我尝试如下插入值, 它给出了错误的说法, 无法将varchar转换为日期时间 然后,我尝试使用以下格式作为我们stackoverflow建议的帖子之一, 但是我仍然收到错误消息, 从字符串转换日期和/或时间时转换失败 有什么建议? 问题答案: SQL Server支持多种格式-有关CAST和CONVERT的信息,请参见MSDN联机丛书。这些格式中的大

  • 询问代码的问题必须表明对正在解决的问题的理解程度最低。。包括尝试的解决方案、它们不起作用的原因以及预期的结果。另请参见:堆栈溢出问题检查表 似乎有很多信息将一个时间段转换为一个时间,但不是相反。 我需要做的一个例子是把120分钟转换成P0DT2H0M0S。和13:10进入P0DT13H10M0S。以及进入PT2H0M0S的120分钟。 有什么快速简单的方法吗?

  • 问题内容: 在SQL 9(2005)中创建了一个存储过程,此后已升级到SQL 10(2008)。从那时起,以下存储过程停止工作并引发上述错误: 传入的参数@vPortalUID包含:2A66057D-F4E5-4E2B-B2F1-38C51A96D385。我执行这样的存储过程: 它跌倒了。我也尝试过转换。仍然没有喜悦。也具有将{}括起来的价值。我如上所述以编程方式和手动方式删除了这些内容。 如果您

  • 主要内容:标签属性,JSF <f:convertDateTime>实例,JSF <f:convertDateTime>实例2标签用于将用户输入转换为指定的日期。 您可以通过将组件标签内的标签嵌套来将组件的数据转换为。 标签有几个属性,可以指定数据的格式和类型。 标签属性 属性 类型 描述 binding DateTimeConverter 它用于将转换器绑定到受委托Bean属性。 dateStyle String 它用于定义由指定的日期或日期字符串的日期部分的格式。 只适用于是或,如果未定义。