问题标签 [xalan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1028 浏览

java - URIResolver、Docbook 和 XSL 转换

我正在尝试使用 Java / Xalan 以及来自https://sourceforge.net/projects/docbook/files/docbook-xsl/1.76.1/的官方 Docbook XSL 文件与一些本地 xsl的混合将一些 Docbook XSL 转换为 HTML提供一些自定义和覆盖的文件。

我想防止我的应用程序不得不下载外部资源或访问本地文件。所以我实现了一个扩展 URIResolver 接口的类。

问题是该resolve(final String href, final String base)函数没有提供足够的信息来识别正在请求的特定文件。

例如,本地覆盖文件之一是使用 .xsl 文件从 xsl 文件导入的<xsl:import href="../../../xsl/html.xsl"/>。在这种情况下,我的解析器类的 href 参数设置为 ../../../xsl/html.xsl,这很好。html.xsl 文件然后导入一个名为 defaults.xsl 的文件。href 参数设置为仅 defaults.xsl,base 参数设置为 null。

这之后可能会导入http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl,在这种情况下 href 参数设置为http://docbook.sourceforge.net/release /xsl/current/xhtml/docbook.xsl。但是,如果 docbook.xsl 导入了一个名为 defaults.xsl 的文件,则 href 参数也设置为 defaults.xsl 并且 base 设置为 null。

问题是 href 和 base 参数不能唯一标识资源,而且您也无法通过查看先前 href 的顺序来猜测正在请求哪个文件。是否有一些技巧可以准确找出请求文件的上下文?

0 投票
2 回答
1248 浏览

java - Barcode4j 不工作(在 Unix 上)

对于我的项目,我需要为 PDF 生成条形码。

我已经能够在我的本地 Windows 服务器上成功生成条形码,在生产 UNIX 服务器上,生成失败。

我使用barcode4j,需要生成code39。

我的模板:

我的图书馆:

  • 条形码4j-fop-ext-complete-2.0
  • 夏兰
  • xercesImpl
  • xml-api
  • xml-apis-ext
0 投票
3 回答
839 浏览

xslt - 如何在 XSLT 中做到这一点而不增加变量?(调整 Xalan 以创建全局 XSLT 迭代器。我还有其他选择吗?)

我试图用 XSLT 术语尽可能多地考虑功能,但在这种情况下,如果不进行调整,我真的不知道如何做到这一点。我大致有这个数据结构:

我大致想将其展平成这种形式

但棘手的是:我想创建 40 个文本行的块,并且事务不能跨块拆分。即,如果我当前的块已经有 38 行,则上述事务必须进入下一个块。当前块需要用两个空行填充以完成 40:

在命令式/过程式编程中,这很容易。只需创建一个计数为 40 的倍数的全局迭代器变量,并在需要时插入空行(我提供了一个答案,展示了如何调整 XSLT/Xalan 以允许此类变量)。但是如何使用 XSLT 做到这一点?注意:考虑到我正在处理的数据的大小,恐怕递归是不可能的......但也许我错了

0 投票
2 回答
827 浏览

xslt - 在 Xalan XSLT 1.0 中,如何将变量传递给模板匹配?

我们在 Java 中使用 Xalan XSLT 1.0,我们希望将变量传递给模板匹配以避免在 XSL 文件中硬编码元素名称。样式表编译,但返回的日期错误。我们是否使用正确的语法?

可能的 XML 输入...

0 投票
1 回答
193 浏览

xml - 在 Xalan XSLT 1.0 中,需要一个函数来返回所有子元素名称

假设我有这个 XML ......

...我如何编写函数或使用内置函数来返回一个字符串,该字符串只是书的所有子元素名称的逗号分隔连接?像这样...

我需要这个来打印 csv 文件中的第一行标题

0 投票
3 回答
42579 浏览

xml - 使用 local-name() 获取 XSLT 中的第一个子节点

假设我们有这个简单的 xml ...

我正在使用这个 xpath 来获取第一本书实例的元素。

退货

这很好用,但我必须使用 local-name() 让它工作。我尝试了以下方法,但这些都不起作用......

这会返回重复的作者和标题元素,不好,我只需要第一个孩子的

这不会返回任何东西

基本上,我想创建一个 CSV 文件,因此输出中的第一行将是一个标题,其中列出了书籍属性名称,后跟任意数据值。我只需要让标题部分工作。

0 投票
2 回答
1121 浏览

java - 尝试使用变量元素名称在 XSLT 中打印出节点值

所以这是最近几天一直困扰我的问题。这应该相当容易,但是 XSLT 调试起来实在是太痛苦了。我们在 java 1.6 上使用 Xalan 1.0

输入 XML

我们需要将 XML 转换为每个 rfb2_item 的逗号分隔值列表,因此样式表总是迭代 rfb2_item 节点。我们在样式表中使用一个参数来控制 rfb2_item (valdate,fund_id,sec_id) 的哪些元素将被输出,以及以什么顺序输出,例如

特殊情况,如果 $outputElements 为 '*',只需按照元素在输入 xml 中出现的顺序输出元素

所以,我的问题是我们如何编写一个模板来根据 $outputElements 参数创建所需的输出?一个工作的例子会很棒......

0 投票
1 回答
602 浏览

java - 使用 xslt 将 xml 转换为 csv 文件

我遇到了 xsl:templates 和 xsl:call-template 标签的问题。也许这是缺乏理解,但这是我想要做的......

如果我有一个在“/*”上匹配的模板,并且我需要从需要其他文档上下文的封闭模板中调用其他模板,那么最有效的方法是什么?

我在调用 header 和 body 模板时使用 xsl:with-param 以便我可以覆盖封闭模板中的 match="/*" ,但是当我这样做时,输出会变得混乱。如果我注释掉对“header”模板的调用,则正文模板可以正常工作,反之亦然,但是从主模板调用两者,如您在上面的示例中所见,会使它们的行为异常。标题和正文模板需要选择文档的不同部分,这就是我选择使用 w0th-param 的原因,但我认为它甚至不起作用。

我应该改用应用模板吗?

0 投票
4 回答
294 浏览

java - 在 XSLT 中对记录进行分组时如何避免 O(n^2) 复杂性?

当我通过 XSL 将大量数据转换为 HTML 时,我经常遇到性能问题。这些数据通常只是几个大致这种形式的非常大的表:

在转换过程中,我想像这样对记录进行可视化分组

这是一个愚蠢的实现(集合来自http://exslt.org。实际的实现有点不同,这只是一个例子):

很容易看出这往往具有O(n^2)复杂性。更糟糕的是,因为每条记录中都有很多字段。操作的数据可达几十MB,记录数可达5000条。最坏的情况下,每条记录都有自己的组和50个字段。更糟糕的是,还有另一个层次的分组可能,使得这O(n^3)

现在会有很多选择:

  1. 我可以找到一个涉及映射和嵌套数据结构的 Java 解决方案。但我想提高我的 XSLT 技能,所以这实际上是最后的选择。
  2. 我可能忘记了 Xerces/Xalan/Exslt 中的一个不错的功能,它可以更好地处理分组
  3. 我也许可以建立某种索引/table/record/group
  4. 您可以向我证明,<xsl:apply-templates/>在这个用例中,该方法明显比该<xsl:for-each/>方法快。

您认为如何O(n^2)降低这种复杂性?

0 投票
2 回答
4850 浏览

xslt - 无法让 Xalan 运行任何示例

我下载Xalan-Java Version 2.7.1了,解压,然后PATH为java和CLASSPATHxalan设置:

(我也尝试为 xalan.jar、xercesImpl.jar、xml-apis.jar 设置类路径)

在测试一个简单的 Hello World 示例(或任何其他示例)时:

我总是得到这个:

问题是什么 ?有人有想法吗?

谢谢。