0

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

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

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

谢谢。

4

1 回答 1

0

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

你没有犯语法错误,但几乎可以肯定你犯了逻辑错误。让我们努力向上。假设当前元素被命名为ns:abc、 或ns:def.ghi或之一ns:jkl.mno.pqr

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

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

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

如果您猜测substring-beforesubstring-after在没有匹配的情况下返回整个字符串,那么现在您知道了真相。

于 2013-05-08T19:23:00.333 回答