问题标签 [xslt-3.0]

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

xslt - xsl:function 定义的函数可以替代 xpath 3.0 内联函数吗?

我在 xpath 3.0 规范中使用了这个例子:

我试图用 xsl:function 定义的函数替换内联函数。

但是得到了“fold-left的第一个参数不能是空序列”的错误。

我做错了什么还是不可能?

提前致谢。

0 投票
1 回答
520 浏览

xquery - 有任何 XPath/XSLT/XQuery 3.0 特定的学习资源吗?

我更喜欢书。你知道有什么要被释放的吗?工作正在进行吗?

我问是因为我想跟上 3.0 中的新功能(我知道它还没有最终确定),但我似乎找不到太多东西。我知道我可以参考正在进行的规范,但如果这对我来说足够了,我就不会问了。

谢谢。

0 投票
2 回答
215 浏览

xslt - 在 XSLT 测试子句中使用 Xpath

我试图将 xpath 表达式作为变量放在 xslt 测试子句中,如下所示:

但是,它不起作用,并且总是评估为假。有谁知道为什么?

0 投票
3 回答
1357 浏览

xml - XSL 根据 Element 值删除所有前面的同级

您好我需要帮助解析以下 XML。

以以下结束

我正在尝试创建一个 XSLT 文档来执行此操作,但尚未找到一个有效的文档。我应该注意,“Doc”中所需的匹配参数是,在本例中为“abc”和“1234”,在现实世界中,这些是变量,永远不会是静态可搜索实体。

所以在英语中,我的 XSL 将是这样的:对于任何同时包含匹配的 'Unit' 和 'unit2' 值的父级,删除所有前面的父级 'Test' 包含重复值的 'Unit' 和 'Unit2' 除了最后一个。

非常感谢所有帮助谢谢

0 投票
1 回答
2153 浏览

xslt-2.0 - 使用 evaluate() 方法时引发 XPath 语法错误

我仍然收到以下错误

修改后的 XSL:

请不要回复,引号会将“tagName”作为字符串并删除这些引号。该值实际上将作为字符串从 java 传递,出于测试目的,我已将此 xpath 作为字符串传递。

0 投票
1 回答
1074 浏览

xslt-2.0 - 遍历包含 CDATA 的节点并连接它们以及如何检索连接数据的特定数据

我是 XSLT 的新手,需要解决一个棘手的问题,但我没有任何改变来解决它。以下示例描述了我的问题:

预期的结果应该是:

我需要遍历元素 b1 和 b2 并将内容连接到一个变量中。然后我需要获取 Ref 元素的内容并将其放入 b1 元素中。以下代码将字段 b1 和 b2 的内容连接在一起。但是如何把它放在上面的格式中??????

欢迎任何建议。问候德克

0 投票
2 回答
113 浏览

xslt-2.0 - 构造一个字母序列

这个 XPath 表达式:

退货

1 2 3 4 5

是否可以用字母字符做类似的事情?

0 投票
1 回答
338 浏览

xslt - 有没有办法在覆盖该属性集时从 XSLT 属性集中删除所有属性?

我正在使用一些第三方 XSLT,它们大量使用属性集将 XML 转换为各种形式的 XSL:FO。例子:

笔记.xsl:

我的想法是导入这个 XSLT,重新定义我认为合适的属性集。如果我只需要给定 .fo 文档的不同字体大小...

问题是有时我需要完全删除属性(即我从包​​含的 fo:block 继承),或者给定的 fo 文档将如此不同,以至于重新开始而不是合并我的属性集会更容易来自notes.xsl的那个。XSLT 2.0 中有没有一种方法可以做到这一点,而无需复制整个笔记模板并在 fo:block 上指定不同的属性集?我想我希望能够做这样的事情:

我不能立即切换到 XSLT 3.0 处理器,但是如果 3.0 中有新的东西可以实现这一点,我很想知道它。

谢谢!

0 投票
1 回答
149 浏览

xslt - XSLT3 算法 Q:基于时间戳查找数据的最快方法——日期 X 之前的最新

我使用大量中小型文档(~2 meg)数据文件,并试图确定基于时间戳查找值的最快方法。

如果我正在查找“查找时间戳 X 的数据”,这将很简单,但我通常希望“查找时间戳在日期 X 之前或日期之前的最新数据”。

以下是具体细节:假设您有一个由 300 座房屋组成的集群,每座房屋偶尔都会收到邮件。您正在监控他们收到的邮件类型。假设您关心 15 类邮件。

感兴趣的问题是“在日期 D 或之前递送到房子的最新邮件类别是什么?”

A. 被引用的数据文件具有以下形式:

B. 数据文件不一定是排序的。如果这对最佳实践产生了影响,请在您的回答中说明。

C. 即使在数据文件中跟踪了大约 300 所房屋,我的工作只需要来自 60 个特定房屋的数据。

D. 信息存在 100 个日期,大多数房屋在这 100 个日期中的 3-20 个收到邮件。

E. 邮件可以全天投递。所以在某一天,一个人可以先得到第 1 类,然后得到第 2 类,最后在晚上得到第 8 类。

F. 对于典型的数据文档,可能会要求大约 10 次给定房屋的信息。

这里有两条可能的路径,以及我对每一条的想法。我希望其中一位 XSLT3 超级程序员会有更好的选择。

解决方案 1:大地图 地图通常是许多 XSLT3 速度问题的首选解决方案,但我不确定它们对这个问题的适用程度如何,因为您似乎必须创建一个巨大的地图,其中大部分是您实际上不需要的。

我尝试过的草图如下:

问题是构建这个地图需要 60 * 100 map{} 命令,其中只有 10% 会被使用。也有几个电话来处理失踪天数的问题。

解决方案 2:小地图

使用地图的另一个选项是将给定房屋的所有邮件数据与该房屋 ID 相关联,然后稍后进行搜索/过滤:

稍后,要回答给定日期的问题,您需要在与该房屋相关的少量数据中进行选择:

房子 x = map:get($mail.map, x)[current()/date le d][last()]/@mail_category 在日期 d 之前的最新邮件类别

这显然需要较少的工作来创建地图,但由于额外的过滤,每次检索数据需要更多的工作。还有一个问题是“大地图”解决方案允许我将房屋/日期直接连接到我想要的值[邮件类型],而这种方法需要我将键值连接到节点,所以会有是从该节点读出邮件类别信息的附加成本。

与解决方案 1 相比,它的最后一个优势是它很容易涵盖“在时间 T或之前的最新邮件类型是什么”的替代问题[因此,它不是基于日期,而是基于实际时间戳。]

解决方案 3:密钥 另一种选择是使用密钥,将给定房屋的所有邮件都键入其 house_id。从理论上讲,这应该与“小地图”选项非常相似。您使用一个键来检索您想要的房子的邮件,然后您过滤以选择最近但在所需日期之前或之前的邮件。

但是,在构造部分存在差异。这些地图需要针对每个组进行一次操作,然后对每个房屋进行一次地图操作。我期望的密钥的构建需要更少的时间。

另一方面,键仅适用于文档模式。如果原始文档没有排序,那么我需要对文档进行排序并在内存中创建一个新文档来处理。我不能简单地在排序的节点序列上构建一个键。我不知道在内存中创建此文档的相对成本,但我想这比在解决方案 2 中构建地图所需的时间要多。

如果原始文档已经排序,那么key可能会更快?

0 投票
2 回答
364 浏览

xslt - XSLT/Xpath——求和函数性能

我经常使用这个 xpathsum(preceding::*/string-length())

它完成了我需要它做的事情(在 XML 文件中提供直到此上下文的所有文本的字符数)。

问题:速度很慢。

我应该使用不同的内置函数吗?还是扩展?

更新:

根据 Michael Kay 的评论,我探索了 XSLT 3.0 <accumulator>。这是我第一次尝试 3.0(我必须更新 OxygenXML 以使其工作)。我还没有完全适应我的需要,但下面的初步测试显示了希望。

题外话:Stack Overflow 需要一个“XSLT-3.0”标签。