我想将XSLT元素的输出限制为2000个字符。该元素具有许多IF条件,并且根据哪些条件为真,显示子元素。我不能使用concat()函数,因为变量在每个IF块中重新初始化。我不能使用substring(),因为有许多子元素,我希望所有子元素的串联为2000个字符。我目前正在研究javascript选项,但没有太多运气。我是XSLT的新手,所以非常感谢。
谢谢, 克莱顿
答案 0 :(得分:1)
这种方法不会起作用吗?根据需要进行转换,但将结果保留在变量中而不是输出文档中。然后将其子串放入输出
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:variable name="normalResult">
<!-- Put your basic transform code here -->
</xsl:variable>
<xsl:template match="/">
<TrimmedResult>
<xsl:value-of select="substring($normalResult, 1, 2000)"/>
</TrimmedResult>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
您不太可能以一种很好的方式在纯XSLT中执行此操作。相反,我建议编写一个在XSLT转换后运行的不同程序,它将生成的XML中的任何长元素截断为2000个字符。
答案 2 :(得分:0)
Greg和Kevan都给了你正确设计的例子:第一次转换没有截断,然后在第二次转换中进行截断。
唯一的问题就是表现。如果第一个转换将产生50Mb的输出,而您只想要第一个50K,那么这不是一种有效的方法。如果可能的话,重写要求以根据输入的大小而不是输出的大小来表达它们。如果你不能这样做,如果两阶段方法太浪费,那么我能想到的唯一解决方案是注入一些状态扩展函数来监视产生的输出量,并让你询问是否有限制已超出。详细信息取决于您选择的处理器。