将多个xslt字符串操作串起来

时间:2013-05-08 16:46:14

标签: xslt

我正在尝试在xslt 1.0中执行以下命令:

 <xsl:element name="{substring-before(concat('dc:',substring-after(name(),'.')),'.')}">
    <xsl:apply-templates/>
 </xsl:element>

我在行上遇到运行时错误,但是如果我删除前一行的substring-before命令就可以了。我猜我在某处犯了语法错误,但不确定是什么(因为我是xslt的新手)。关于我做错了什么的指示?我猜一个问题可能是什么做substring-before返回如果没有找到针串?

感谢。

1 个答案:

答案 0 :(得分:0)

如果$ haystack不包含$ needle的实例,那么substring-before($ haystack,$ needle)将返回空字符串。

您没有出现语法错误,但几乎可以肯定会出现逻辑错误。让我们一路走来。假设当前元素被命名为ns:abcns:def.ghins:jkl.mno.pqr之一。

  1. 表达式substring-after(name(),'.')返回'','ghi'或'mno.pqr'。

  2. concat表达式将dc:添加到开头,因此我们有'dc:','dc:ghi'或'dc:mno.pqr'。

  3. 完整表达式在连接结果中搜索“。”并在'。'之前返回子字符串。或者是空字符串,所以我们得到'',''和'pqr'来表示我们的三个测试用例。

  4. 如果您猜测substring-beforesubstring-after如果没有匹配则返回整个字符串,那么现在您就知道了真相。