gpt4 book ai didi

Java Saxon 解析

转载 作者:行者123 更新时间:2023-12-01 11:26:52 25 4
gpt4 key购买 nike

我正在使用 Saxon 解析器将大文件拆分为较小的文件。下面是我的示例代码,

  TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory
.newTransformer(new StreamSource(new File(xsltPath)));
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
transformer.transform(new StreamSource(new File(sourcePath)),
new StreamResult(new File(resultDir)));

Where sourcePath = C:/path/Temp/AppModule.xml xsltPath = C:/path/Temp/create-fragment.xslt resultDir = C:/path/Temp/

此代码完美地将 AppModule.xml 拆分为较小的 xml 文件,但在控制台中出现异常,

Error java.io.FileNotFoundException: C:\path\Temp (Access is denied) net.sf.saxon.trans.XPathException: java.io.FileNotFoundException: C:\path\Temp (Access is denied)

我用谷歌搜索发现我应该为 new File() 方法指定确切的文件名。但正如您所看到的,我在编译时不知道文件名,只有在运行时解析器才会识别输入 AppModule.xml 并将该 xml 拆分为较小的文件,其中包含值标签的名称。

AppModule.xml

    <?xml version='1.0' encoding='UTF-8'?>
<data>
<value>A1</value>
<value>B1</value>
<value>C1</value>
<value>A2</value>
<value>B2</value>
<value>C2</value>
</data>

输出:A1.xml:

<?xml version="1.0" encoding="UTF-8"?>
<test>A1</test>

同样会相应创建B1,c1,A2,B2,C2文件。

请分享您的宝贵意见。

最佳答案

您在结果对象中给出的文件不应是目录。如果转换不产生“主”输出文件,而仅使用 xsl:result-document 产生输出,那么您应该将结果文件指定为 new File("c:/path/temp/dummy.xml")。该文件将用作“基本输出 URI”,用于解析 xsl:result-document/@href 中提供的任何相对文件名。

您使用的 API 称为 JAXP,问题是它是为 XSLT 1.0 设计的,在该版本中您只能有一个结果文档。 Saxon 试图扩展 JAXP 中的概念,使其与 XSLT 2.0 一起使用,但它并不是真正为这项工作而设计的。您可能想看看 Saxon 的 s9api 接口(interface)作为替代方案。

关于Java Saxon 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30752656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com