使用XSLT1.0提取两个特殊字符($)之间的字符串



输入:"abcdef$ghi$jklmno$pqrst$ wx $yx$"

预期输出:

<tokens>
<token>$ghi$</token>
<token>$pqrst</token>
<token>$yx$</token>
</tokens>

根据示例输入字符串,输出必须与使用XSLT1.0的预期输出类似

提前感谢

对于每对美元符号(1,2),(3,4)。。。(2×n-1,2&timers;n)您想要一个令牌元素,其文本介于美元符号编号2&times之间n-1和美元符号号2n

两种情况中的一种必然适用。

情况1:n存在一些固定的最大值,并且它相对较小(例如,小于5或10)。在这种情况下,一个简单的xs:variable分配序列以及对substring-beforesubstring-after的适当调用就足够了,您就完成了。你最终会得到这样的东西:

  • s0为原始字符串,s1s 0中第一个美元符号之后的子字符串,t1s1中第一个$符号之前的子字符串;r1则是s1
  • 现在,让s2r1中第一个美元符号之后的子字符串,t2s2第一个美元标志之前的子字符串
  • 根据需要重复:对于3到n中的i,让siri-1中第一个美元符号之后的子字符串,tisi第一个美元标志之前的子字符串。si

情况2:没有最大n。在这种情况下,XSLT1.0中的直接方法是编写一个命名模板,该模板(a)将子字符串放在第一个美元符号之前,(b)构造一个包含美元符号的token元素,第一个美元标志之后和第二个美元标志之前的字符串,和(c)用第二个美元符号后的子字符串递归调用自己。为空字符串、带有奇数美元符号的字符串和其他输入错误添加适当的边界条件,就完成了。

所以:阅读XSLT1.0的字符串函数并解决您的问题。如果你还有麻烦,就回来(展示你的作品)。

希望下面的xsl对您有所帮助。它有效。我自己试过了。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:variable name="input">
<xsl:text>abcdef$ghi$jklmno$pqrst$ wx$yx$</xsl:text>
</xsl:variable>
<tokens>    
<xsl:text>&#10;</xsl:text>
<xsl:analyze-string select="$input" regex="($[a-z]+$)">
<xsl:matching-substring>
<token>
<xsl:value-of select="regex-group(1)"/>
</token>
<xsl:text>&#10;</xsl:text>
</xsl:matching-substring>
</xsl:analyze-string>
</tokens>
</xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新