输入: "abcdef$ghi$jklmno$pqrst$ wx $yx$"
预期输出:
<tokens>
<token>$ghi$</token>
<token>$pqrst</token>
<token>$yx$</token>
</tokens>
根据示例输入字符串,输出必须类似于使用 XSLT 1.0 的预期输出
提前致谢
输入: "abcdef$ghi$jklmno$pqrst$ wx $yx$"
预期输出:
<tokens>
<token>$ghi$</token>
<token>$pqrst</token>
<token>$yx$</token>
</tokens>
根据示例输入字符串,输出必须类似于使用 XSLT 1.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> </xsl:text>
<xsl:analyze-string select="$input" regex="(\$[a-z]+\$)">
<xsl:matching-substring>
<token>
<xsl:value-of select="regex-group(1)"/>
</token>
<xsl:text> </xsl:text>
</xsl:matching-substring>
</xsl:analyze-string>
</tokens>
</xsl:template>
</xsl:stylesheet>
对于每对美元符号 (1,2), (3,4), ... (2 × n - 1, 2 × n ),您需要一个标记元素,其文本介于美元符号编号 2 × n - 1 和美元符号数字 2 n。
两种情况之一必然适用。
情况 1: n有一些固定的最大值,并且它相对较小(例如,小于 5 或 10)。在这种情况下,一个简单的xs:variable
赋值序列加上适当的调用substring-before
就substring-after
足够了,你就完成了。你最终会得到这样的东西:
情况 2:没有最大值n。在这种情况下,XSLT 1.0 中的直接方法是编写一个命名模板,它 (a) 删除第一个美元符号之前的子字符串,(b) 构造一个token
包含美元符号的元素,即第一个美元符号之后和第二个美元之前的字符串符号,并且 (c) 在第二个美元符号之后使用子字符串递归调用自身。为空字符串、带有奇数个美元符号的字符串和其他输入错误添加适当的边界条件,您就完成了。
所以:阅读 XSLT 1.0 的字符串函数并解决您的问题。如果您遇到更多麻烦,请回来(并展示您的工作)。