xml - xslt 中 str:replace() 函数的运行时错误
问题描述
我str:replace()
在 xslt 1.0 中使用函数。它在某些情况下运行良好。在一种情况下,我正在使用replace()
在 xml 文件中修改节点的值,它抛出了这个错误:
runtime error: file http://exslt.org/str/functions/replace/str.replace.function.xsl line 24 element copy-of
Cannot add an attribute node to a non-element node.
我replace()
通过导入此扩展功能来访问该功能:
<xsl:import href="http://exslt.org/str/functions/replace/str.replace.function.xsl"/>
谁能发现我可能无意中犯下的一些明显错误来触发此错误?
同时,我正在尝试制作一个示例xsl
文件来显示尝试的代码行。我正在尝试使用--verbose
命令中可用的命令行功能来可视化情况xsltproc
。
更新:
正如 Martin 所建议的,只需添加string()
替换参数即可解决运行时错误,如下所示:
str:replace(string, object, string(object))
我有两个后续问题:
- 添加 string() 如何解决这里的问题?
- 现在它正在工作,但是在替换之后,我必须匹配更新的元素,
key()
但false
即使更新的元素已经在键集中,它也会给出,是否有可能replace()
在某种意义上改变了元素?
例如:我的 key() 中已经有“alpha.beta”,并且通过使用将元素“alpha.gamma”替换为“alpha.beta” str:replace()
,key() 在这种情况下返回 false?
解决方案
文档/规范http://exslt.org/str/functions/replace/index.html明确表示:“如果替换节点列表中的任何节点是属性节点或命名空间节点,则会出错。”。因此,您似乎在替换节点列表中有一个不受支持的属性节点。也许您只需要一个替换作为字符串,并且这种方式可以只string(@att)
用于该参数。
链接库中的第 23-25 行
<xsl:variable name="replace-nodes-rtf">
<xsl:copy-of select="$replace" />
</xsl:variable>
因此以这种方式将属性节点填充到变量中是不可能的,并且会导致失败。
推荐阅读
- java - 安排短信
- python - 请检查有关“sort_values”的错误消息
- c++ - 模板基类函数成员的别名
- python - 我的 TCP 服务器只发送 b' ' 而不是腌制数据
- process - 进程数
- machine-learning - 如何将数据集识别为时间序列数据?
- javascript - 虽然 this.state 是一个 Javascript 对象,但为什么即使在将具有数据的状态传递给它之后状态为 null?
- yii2 - Yii2 : 在 appasset 中切换生产和开发版本脚本
- oracle - 创建 Oracle SQL Java 函数不起作用
- python - LD_preload 用于使用其他版本的 libc,在 pwntools 中不起作用