问题标签 [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.
xml - XSLT 中的 Str:Tokenize 未给出预期结果
我有以下分隔格式文件
我希望将以下文件转换为这种格式的 XML
以下是我尝试过的
但我在输出中没有得到任何值,只有封闭标签
我做错了什么
请
谢谢
xslt - 在 Xalan Java 中使用非核心 EXSLT 日期函数
我已经让 EXSLT 的核心日期函数在我多年来一直使用的一些 XSL 模板中运行良好。我想开始使用一个新的:seconds
. 此功能不是“核心”功能之一,因此实现可以声称符合 EXSLT 而无需实际实现它。
我正在使用带有 Xalan 2.7.1 的 Cocoon 2.1.11,它似乎选择不实现date:seconds
.
幸运的是,EXSLT 的好心人提供了下载来帮助您插入各个功能,但我似乎无法弄清楚如何实际实现该插件。
我可以使用此模板轻松使用核心功能,例如:
尝试使用该date.seconds
功能时,我尝试了以下方法:
- 只需添加
<xsl:import href="date.seconds.xsl" />
到我的模板中,然后使用date:seconds()
. 这让我收到错误消息“对于扩展功能,找不到方法 org.apache.xalan.lib.ExsltDatetime.seconds” - 删除
xmlns:date
如上所示。这让我收到错误“前缀必须解析为命名空间:日期” - 将 的内容
date.seconds.xsl
放在我要编写的模板中,然后date:seconds()
不带参数调用(默认情况下它被定义为使用当前时间)。我收到此错误消息:“对方法秒的实例方法调用需要一个对象实例作为第一个参数”。现在看起来很有希望。 - 向
date:seconds
. 我收到错误消息:“对于扩展函数,找不到方法 java.lang.String.seconds([ExpressionContext,] )”
有关如何使用此非核心 EXSLT 功能的任何建议?
这是我当前的模板,仍然告诉我它正在尝试调用java.lang.String.seconds()
:
xml - XSL 包含 XSL 以注册命名空间以处理带有包含 XSL 前缀的 xpath
好的。我为我的写作感到抱歉,但我为处理 xPath 所做的事情非常奇怪。我只使用 xsltproc,所以只有 XSLT 1.0 和 EXSLT 是我的工具。
我使用一个输入 xml 文件来获取我还必须处理的其他 xml 文件。这导致我不知道我正在应用的 xsl 中的前缀和命名空间。
此外,我必须从我的输入 xml 文件中使用“xPathes”(存储为属性)。所以我必须使用 EXSLT 来评估加载到变量的文档上的 (dyn:evaluate function) xpathes:
形成 importDoc:
所以在那之后我想使用一个xpath ...在我的xslt中类似的东西:
但最后我收到了这条消息
所以我需要像“自动注册命名空间”这样的东西???或者是否可以使用目录文件来解决这个问题???或者也许我可以使用某些类型的导入或包含???
此致
马库斯
xml - xslt 变量类型 element() 无法通过 xpath 向下钻取
我在 XSLT 2.0 上构建了这个函数和转换(请注意,下面元素的值实际上填充了正确的值,只是不想复制粘贴 3 个其他函数:-)):
我认为这段代码会生成一个存储在变量中的 xml 树,我可以进一步向下钻取。但是当我尝试这个时:
没有返回值,我几乎尝试了所有方法,甚至 exslt:node-set() 但没有任何帮助...我可以将此变量“max_vertical_nodes_for_each_child_from_root”作为参数发送,并且该参数再次(至少根据氧气)相同结构,但即使在另一个功能/转换中,我也无法深入研究......
任何猜测我错过了什么或做错了什么?
感谢您的任何回答!
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 中给了我这个错误:
xml - 使用 exslt str:replace 的问题
在使用 exslt 字符串替换功能时,我认为是一个命名空间的问题。我想按照此处的文档使用 exslt 字符串替换函数的节点集形式替换目标字符串中的几个字符串。然而,它似乎只替换了节点集的第一个字符串,而不是其他字符串。
这是我的文件:
这是输出:
正如您在输出中看到的那样。在使用该函数时,只有第一个节点的字符串被替换。第二个没有。如您所见,我将模板代码从 exslt.org 复制到文件中,起初它没有工作,直到我将它添加xmlns=""
到 str:replace 模板中,如下所示:
那时模板表单起作用了,这让我相信这是一个名称空间问题。我相信在函数中对节点进行排序并创建自己的replace
节点时,如下所示:
该节点可能最终位于不同的命名空间中,因此后续循环无法解决它们。将xmlns
属性添加到str:replace
将其中创建的任何节点放入与我传入的节点相同的空命名空间中,然后它就可以工作了。但是,无论我尝试什么,我都无法使功能版本正常工作。我什至从文件和我创建的 xml 节点集中删除了所有命名空间,但它仍然不起作用。坦率地说,所有这些命名空间的东西让我有点困惑。也许这根本不是问题。
任何帮助将不胜感激,谢谢!
xml - 删除 xslt 中具有相同 id 的第二个节点
我需要使用 XSLT 2.0 在 xml 文件中删除一些具有相同 ID 的节点。结构是:
结果必须是:
我有多个具有相同属性 ID 值。谢谢
xml - 使用太多参数调用的函数
我想使用 EXSLT 库在 XSLT 1.0 中编写一个函数。这是我的样式表。
不幸的是,当我尝试执行它时,xsltproc
我收到以下错误。
{ http://www.example.com/ }test: 使用太多参数调用 xmlXPathCompiledEval: 1 个对象留在堆栈上。运行时错误:文件 exslt_function_test.xsl 第 16 行元素值 - XPath 评估未返回结果。
我没有看到任何错误。该函数是用两个参数定义和调用的。过去有没有人遇到过类似的问题?
删除任何不必要的评论...不,我不能使用 XSLT 2.0。
xslt - 分组数据的分组
输入:
预期输出:
和上面的例子一样,我首先需要对人名进行分组并找到每个人的角色。如果发现不止一个人具有相同的一组角色(例如,约翰和雅各布都是作家和诗人),那么我需要对每组角色进行分组并列出人名。
我可以使用 Muenchian 方法或 EXSLTset:distinct
等进行第一级分组。
以上是使用 XSLT 1.0 和 EXSLT 转换的:
但是,我需要帮助来了解如何对分组角色进行分组。
如果 XSLT 1.0 解决方案不可用,请随时推荐 XSLT 2.0 方法。
xslt - 根据空格分隔的标签列表和其他对项目列表进行分组
问题有多个方面:
- 如何根据标签的特定空格分隔内容进行分类
- 缺少此类具体内容如何分类。
以以下数据为例:
给定一组已知的标签,比如说
我想生成一个如下所示的输出:
使用 EXSLT 很好,否则需要 1.0 解决方案。这可能吗?