Xml XSLT中的子字符串函数行为奇怪

Xml XSLT中的子字符串函数行为奇怪,xml,xslt-2.0,Xml,Xslt 2.0,我正在搜索一个包含值“by”的关键字元素,我想从中提取后面的名称 例如,关键字元素可以有一个值“by John Doe”,我想提取“John Doe”,所以我可以在另一个选择中使用这个名称 简化的XML如下所示: <article-set> <article id="blog-article"> <title>Blog Article</title> <keywords>by John Doe</keywor

我正在搜索一个包含值“by”的关键字元素,我想从中提取后面的名称

例如,关键字元素可以有一个值“by John Doe”,我想提取“John Doe”,所以我可以在另一个选择中使用这个名称

简化的XML如下所示:

<article-set>

  <article id="blog-article">
    <title>Blog Article</title>
    <keywords>by John Doe</keywords> 
  </article>

  <article id="john-doe">
    <title>John Doe</title>
  </article>

</article-set>

博客文章
约翰·多伊
无名氏
这是一个相关的XSL:

<xsl:template match="article">
    <xsl:for-each select="keywords">  
        <xsl:if test="contains(current(), 'by ')">

                <xsl:value-of select="substring(current(), 3)"/>

                <xsl:value-of select="//article[title = 'John Doe']"/>

                <xsl:value-of select="//article[title = (substring(current(), 3))]"/>

        </xsl:if>
    </xsl:for-each>
</xsl:template>

的每个值的结果如下:

  • 无名氏

  • 按预期选择所需的项目元素

  • 问题:不选择任何内容

  • 所以,由于我在的第二个硬编码值中得到了预期的结果,也许我遗漏了一些关于子字符串函数的基本信息,或者在给定的上下文中

    Obs:我还尝试将一个变量设置为substring(current(),3)并引用它,而不是硬编码路径(“johndoe”),但运气不好,我得到了相同的行为


    有人知道为什么会发生这种情况吗?

    XPath字符串的索引以1开头,因此John Doe给出了
    我想你想要
    //文章[title=substring(current(),4)]

    考虑发布最小但完整的示例,让我们重现问题。我担心
    甚至不会被XML解析器解析。这是正确的,非常感谢!在选择之外输出值时,我遗漏了一个额外的空格。我感谢你们的投入,下次我会更加小心地发布完整的测试用例!