我正在使用XSLT解析XML元素的文本内容。该文本包含换行符,但我似乎无法正确解析它们。我正在使用在网上找到的代码来分割文本。这是代码的相关部分。
<xsl:variable name="first">
<xsl:value-of select="substring-before($source, $newline)"/>
</xsl:variable>
<xsl:variable name="rest">
<xsl:value-of select="substring-after($source, $newline)"/>
</xsl:variable>
这是将$ rest插入自身的可恢复模板的一部分。
问题在于代码示例 undefined $ newline。
如果我将$ newline设置为字母(例如“s”),则文本会被很好地拆分(例如,它将输入“回响”变成“重新”和“回响”)。但是,当我尝试将$ newline设置为换行符(


或 
)时,它将永久递归并给我带来了堆栈溢出。我还尝试为换行符定义一个ENTITY,但这没什么区别。输入的每行末尾都有普通的CR / LF(我在Windows框上)。
任何人都知道我在做什么错,还是建议一种方法?
谢谢,
马蒂斯
最佳答案
如果可以使用EXSLT,请尝试str:tokenize
<xsl:for-each select="str:tokenize($source, $newline)">
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
或类似地使用XSLT 2.0:
<xsl:for-each select="tokenize($source, $newline)">
<xsl:sequence select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
关于string - 在XSLT中,如何将元素的文本内容分成几行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9806149/