我正在尝试在xslt 1.0中执行以下命令:
<xsl:element name="{substring-before(concat('dc:',substring-after(name(),'.')),'.')}">
<xsl:apply-templates/>
</xsl:element>
我在行上遇到运行时错误,但是如果我删除前一行的substring-before命令就可以了。我猜我在某处犯了语法错误,但不确定是什么(因为我是xslt的新手)。关于我做错了什么的指示?我猜一个问题可能是什么做substring-before返回如果没有找到针串?
感谢。
答案 0 :(得分:0)
如果$ haystack不包含$ needle的实例,那么substring-before($ haystack,$ needle)将返回空字符串。
您没有出现语法错误,但几乎可以肯定会出现逻辑错误。让我们一路走来。假设当前元素被命名为ns:abc
或ns:def.ghi
或ns:jkl.mno.pqr
之一。
表达式substring-after(name(),'.')
返回'','ghi'或'mno.pqr'。
concat
表达式将dc:
添加到开头,因此我们有'dc:','dc:ghi'或'dc:mno.pqr'。
完整表达式在连接结果中搜索“。”并在'。'之前返回子字符串。或者是空字符串,所以我们得到'',''和'pqr'来表示我们的三个测试用例。
如果您猜测substring-before
和substring-after
如果没有匹配则返回整个字符串,那么现在您就知道了真相。