我正在搜索关键字元素,其中包含值" 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>
每个值的结果为:
John Doe
按预期选择我需要的文章元素
问题:不会选择任何内容。
所以,既然我在第二个硬编码值中得到了预期的结果,或许我遗漏了一些关于子串函数或给定上下文的基本内容?
Obs:我也尝试将变量设置为 substring(current(),3)并引用它而不是硬编码路径(&#39; John Doe&#39;)没有运气,我有同样的行为。
有没有人知道为什么会发生这种情况?
答案 0 :(得分:1)
XPath字符串的索引从1开始,所以给定by John Doe
我想你想要//article[title = substring(current(), 4)]
。