gpt4 book ai didi

java - 计算 xsl :result-document in a given stylesheet 的所有出现次数

转载 作者:行者123 更新时间:2023-12-02 09:05:30 24 4
gpt4 key购买 nike

我的应用程序的一部分有问题,其中有一些用于 xslt 转换功能的实用程序类。我使用 SaxonHE 作为 XSLT Transformer 实现。

我的助手类有一个函数:URL mapFile(URL input, String stylesheetPath)

它将一个 XML 文件的 URL 作为输入并返回所创建的 XML 文件的 URL。它处理 XSLT 转换的初始化和执行。

但是理论上,样式表可以使用 xsl:result-document 标记创建多个 XML 文件,我希望我的实用程序类能够识别给定的样式表是否可以做到这一点并正确处理它。

我的想法是从 Java 代码中分析/解析样式表并计算 xsl:result-document 的所有出现次数。

通过 href 属性的值,我还可以知道样式表在哪里创建输出 XML 文件,因为我想返回指向其位置的 URL。

所以我改变的实用方法是:List<URL> mapFile(URL input, String stylesheetPath)并根据给定样式表创建的文件数量返回多个 URL。

但我不知道如何在 Java 代码中执行此操作,并且我所有有关对 xsl 样式表中的元素进行计数的 google 搜索都会解释如何从样式表内部对输入 XML 的 XML 元素进行计数,这不是我想要的要做的事。

编辑:我最终根本没有对样式表进行任何解析。我只是创建一个文件夹,如果有人编写了一个样式表,但没有将所有结果文件放入该文件夹中,那么如果他们没有获得该结果文档的 URL,那就是他们的错。一个 hacky 解决方案,但它适用于我的用例。

最佳答案

对于单模块样式表来说非常简单:只需执行 XPath 表达式 count(//xsl:result-document)

对于具有多个模块的样式表,它会变得更加复杂,因为您必须遵循 xsl:includexsl:import 引用,更具体地说,您必须检测循环在包含/导入图中,这样您就不会进入无限循环。

您可以将样式表导出到 SEF 文件并在 SEF 文件上执行 count(//*:resultDoc)。不幸的是,这是 Saxon-EE,它会花钱,但是手工编写代码也会花钱......

但实际上你要求的是两件不同的事情。首先,您说您想知道 xsl:result-document 指令的数量,然后您说您想知道创建了多少个结果文档。它们不是同一件事,因为您不知道每个 xsl:result-document 指令的执行频率。

我怀疑您可以通过向 Saxon 注册结果文档处理程序并使用它在运行时监视 xsl:result-document 上的调用来解决该问题。

关于java - 计算 xsl :result-document in a given stylesheet 的所有出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59844126/

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