XSLT中的子串函数表现很奇怪

时间:2017-08-03 09:59:20

标签: xml xslt-2.0

我正在搜索关键字元素,其中包含值" 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>

每个的结果为:

  1. John Doe

  2. 按预期选择我需要的文章元素

  3. 问题:不会选择任何内容。

  4. 所以,既然我在第二个硬编码值中得到了预期的结果,或许我遗漏了一些关于子串函数或给定上下文的基本内容?

    Obs:我也尝试将变量设置为 substring(current(),3)并引用它而不是硬编码路径(&#39; John Doe&#39;)没有运气,我有同样的行为。

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

1 个答案:

答案 0 :(得分:1)

XPath字符串的索引从1开始,所以给定by John Doe我想你想要//article[title = substring(current(), 4)]