问题标签 [exslt]

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 回答
507 浏览

xml - XSLT 中的 Str:Tokenize 未给出预期结果

我有以下分隔格式文件

我希望将以下文件转换为这种格式的 XML

以下是我尝试过的

但我在输出中没有得到任何值,只有封闭标签

我做错了什么

谢谢

0 投票
2 回答
1968 浏览

xslt - 在 Xalan Java 中使用非核心 EXSLT 日期函数

我已经让 EXSLT 的核心日期函数在我多年来一直使用的一些 XSL 模板中运行良好。我想开始使用一个新的:seconds. 此功能不是“核心”功能之一,因此实现可以声称符合 EXSLT 而无需实际实现它。

我正在使用带有 Xalan 2.7.1 的 Cocoon 2.1.11,它似乎选择不实现date:seconds.

幸运的是,EXSLT 的好心人提供了下载来帮助您插入各个功能,但我似乎无法弄清楚如何实际实现该插件。

我可以使用此模板轻松使用核心功能,例如:

尝试使用该date.seconds功能时,我尝试了以下方法:

  1. 只需添加<xsl:import href="date.seconds.xsl" />到我的模板中,然后使用date:seconds(). 这让我收到错误消息“对于扩展功能,找不到方法 org.apache.xalan.lib.ExsltDatetime.seconds”
  2. 删除xmlns:date如上所示。这让我收到错误“前缀必须解析为命名空间:日期”
  3. 将 的内容date.seconds.xsl放在我要编写的模板中,然后date:seconds()不带参数调用(默认情况下它被定义为使用当前时间)。我收到此错误消息:“对方法秒的实例方法调用需要一个对象实例作为第一个参数”。现在看起来很有希望。
  4. date:seconds. 我收到错误消息:“对于扩展函数,找不到方法 java.lang.String.seconds([ExpressionContext,] )”

有关如何使用此非核心 EXSLT 功能的任何建议?

这是我当前的模板,仍然告诉我它正在尝试调用java.lang.String.seconds()

0 投票
1 回答
443 浏览

xml - XSL 包含 XSL 以注册命名空间以处理带有包含 XSL 前缀的 xpath

好的。我为我的写作感到抱歉,但我为处理 xPath 所做的事情非常奇怪。我只使用 xsltproc,所以只有 XSLT 1.0 和 EXSLT 是我的工具。

我使用一个输入 xml 文件来获取我还必须处理的其他 xml 文件。这导致我不知道我正在应用的 xsl 中的前缀和命名空间。

此外,我必须从我的输入 xml 文件中使用“xPathes”(存储为属性)。所以我必须使用 EXSLT 来评估加载到变量的文档上的 (dyn:evaluate function) xpathes:

形成 importDoc:

所以在那之后我想使用一个xpath ...在我的xslt中类似的东西:

但最后我收到了这条消息

所以我需要像“自动注册命名空间”这样的东西???或者是否可以使用目录文件来解决这个问题???或者也许我可以使用某些类型的导入或包含???

此致

马库斯

0 投票
1 回答
322 浏览

xml - xslt 变量类型 element() 无法通过 xpath 向下钻取

我在 XSLT 2.0 上构建了这个函数和转换(请注意,下面元素的值实际上填充了正确的值,只是不想复制粘贴 3 个其他函数:-)):

我认为这段代码会生成一个存储在变量中的 xml 树,我可以进一步向下钻取。但是当我尝试这个时:

没有返回值,我几乎尝试了所有方法,甚至 exslt:node-set() 但没有任何帮助...我可以将此变量“max_vertical_nodes_for_each_child_from_root”作为参数发送,并且该参数再次(至少根据氧气)相同结构,但即使在另一个功能/转换中,我也无法深入研究......

任何猜测我错过了什么或做错了什么?

感谢您的任何回答!

0 投票
2 回答
717 浏览

xml - 在浏览器中使用的样式表中使用标记化

我正在尝试从一个大字符串中为一个变量分配一个特定的标记。我首先标记字符串,然后为每个标记检查它是否包含某个子字符串。如果是这样,我想将该标记分配给变量。

最后,我使用该变量来设置 div 的属性。

我在下面尝试了这段代码,它给了我想要的确切输出oXygen XML Editor。但是,当我在 (11) 中运行 XML/XSLT 文件时IE,它只是简单地打印出整个原始字符串,即xhtmlVar下面的 XSLT。div 甚至没有出现(它可能在 DOM 中,但我没有直观地看到它——我会稍后重新检查)。

XSLT

我怎样才能达到我想要的?难道我做错了什么?任何有关如何更优雅地编写上面代码的提示也值得赞赏!

提前致谢!


更新:

正如下面的 Martin Honnen 所建议的,我已将代码更改为使用 EXSLT。

但是,现在 tokenize 模板似乎只是简单地删除了指定的分隔符,而不是实际将其用作分隔符。另外,我不知道如何使用空格作为分隔符:

...

上面的代码不会打印出由单词“Ha”分隔的每个标记,而是打印出整个字符串(每个标记),但逗号分隔符“,”将被删除。然后“哈”出现在最后。我是否可能node-set错误地使用了该功能?

此外,如果我尝试使用分隔符$spaceChar或整个单词,例如'than',我经常会得到类似于“模板指令堆栈溢出”错误的内容。


每个 michael.hor 的答案的代码有效。

str:replace()像这样使用

但是,在 oXygen XML 中给了我这个错误:

0 投票
1 回答
901 浏览

xml - 使用 exslt str:replace 的问题

在使用 exslt 字符串替换功能时,我认为是一个命名空间的问题。我想按照此处的文档使用 exslt 字符串替换函数的节点集形式替换目标字符串中的几个字符串。然而,它似乎只替换了节点集的第一个字符串,而不是其他字符串。

这是我的文件:

这是输出:

正如您在输出中看到的那样。在使用该函数时,只有第一个节点的字符串被替换。第二个没有。如您所见,我将模板代码从 exslt.org 复制到文件中,起初它没有工作,直到我将它添加xmlns=""到 str:replace 模板中,如下所示:

那时模板表单起作用了,这让我相信这是一个名称空间问题。我相信在函数中对节点进行排序并创建自己的replace节点时,如下所示:

该节点可能最终位于不同的命名空间中,因此后续循环无法解决它们。将xmlns属性添加到str:replace将其中创建的任何节点放入与我传入的节点相同的空命名空间中,然后它就可以工作了。但是,无论我尝试什么,我都无法使功能版本正常工作。我什至从文件和我创建的 xml 节点集中删除了所有命名空间,但它仍然不起作用。坦率地说,所有这些命名空间的东西让我有点困惑。也许这根本不是问题。

任何帮助将不胜感激,谢谢!

0 投票
2 回答
281 浏览

xml - 删除 xslt 中具有相同 id 的第二个节点

我需要使用 XSLT 2.0 在 xml 文件中删除一些具有相同 ID 的节点。结构是:

结果必须是:

我有多个具有相同属性 ID 值。谢谢

0 投票
1 回答
655 浏览

xml - 使用太多参数调用的函数

我想使用 EXSLT 库在 XSLT 1.0 中编写一个函数。这是我的样式表。

不幸的是,当我尝试执行它时,xsltproc我收到以下错误。

{ http://www.example.com/ }test: 使用太多参数调用 xmlXPathCompiledEval: 1 个对象留在堆栈上。运行时错误:文件 exslt_function_test.xsl 第 16 行元素值 - XPath 评估未返回结果。

我没有看到任何错误。该函数是用两个参数定义和调用的。过去有没有人遇到过类似的问题?

删除任何不必要的评论...不,我不能使用 XSLT 2.0。

0 投票
2 回答
117 浏览

xslt - 分组数据的分组

输入:

预期输出:

和上面的例子一样,我首先需要对人名进行分组并找到每个人的角色。如果发现不止一个人具有相同的一组角色(例如,约翰和雅各布都是作家和诗人),那么我需要对每组角色进行分组并列出人名。

我可以使用 Muenchian 方法或 EXSLTset:distinct等进行第一级分组。

以上是使用 XSLT 1.0 和 EXSLT 转换的:

但是,我需要帮助来了解如何对分组角色进行分组。

如果 XSLT 1.0 解决方案不可用,请随时推荐 XSLT 2.0 方法。

0 投票
2 回答
75 浏览

xslt - 根据空格分隔的标签列表和其他对项目列表进行分组

问题有多个方面:

  1. 如何根据标签的特定空格分隔内容进行分类
  2. 缺少此类具体内容如何分类。

以以下数据为例:

给定一组已知的标签,比如说

我想生成一个如下所示的输出:

使用 EXSLT 很好,否则需要 1.0 解决方案。这可能吗?