【发布时间】:2016-06-21 16:36:49
【问题描述】:
我希望这是一个简单的,虽然它似乎往往不是......
我正在使用 XLST 1.0,我有一个字符串,我需要 translate。此字符串是用户输入的文本字段。它包含几个由分隔符分隔的较小字符串。 (在这种情况下,它是“|”。)这个字符串的长度和特殊字符的数量变化很大。
(此字段类似于 CSV 列表,但不是使用逗号作为分隔符,而是使用“|”作为分隔符。)
我需要学习如何将此分隔符更改为<br>。
我已尝试使用以下 XSL 来实现此目的:
<xsl:variable name="stringtotrans">
<xsl:text>String1|String2|String3</xsl:text>
</xsl:vairable>
<!-- In the actual XML document, this variable grabs the value of an attribute. -->
<!-- For this example, it's being entered manually. -->
<!-- The number and length of the individual strings varies widely. -->
<xsl:value-of select="translate($stringtotrans, '|', '

')"/>
当这段代码运行时,输出为:
String1String2String3
预期/期望的输出是:
String1
String2
String3
我们将不胜感激任何和所有的帮助!
【问题讨论】:
-
translate()函数可以将一个字符转换为另一个字符。它不能将一个字符转换为两个或多个字符的字符串,也不能转换为诸如<br>之类的元素。为此,您需要一个递归模板,如下所示:stackoverflow.com/questions/30339128/… -
哦,太好了...
/sarc我会检查这个例子,看看我是否能解决这个问题。同时,有没有其他方法可以达到预期的效果? -
“有没有其他方法可以达到预期的效果?” XSLT 1.0 中没有。如果您的 XSLT 1.0 处理器支持 EXSLT
str:tokenize()扩展功能,那么它会更容易一些。 --附言您还没有确切地告诉我们您的“期望结果”是什么。 -- PP.S.你的讽刺错位了。 -
迈克尔,我不确定我是否理解你(在任何方面)。所需的结果如上所示。分隔列表中的每个子字符串,带有“|”分隔符,应该出现在它自己的行上。至于
/sarc,这是指translate函数无法执行任何重要价值的翻译,唯一明显的替代方案是更复杂和复杂的解决方案。这绝不是贬低您的回应,也不是针对您的。 -
"所需的结果如上所示。" 你说:“将此分隔符更改为换行符、
或其他此类字符。”这很模棱两可。如果您的结果是文本,那么newline可以表示 CR (Mac)、LF (Unix) 或 CRLF (Windows)。前两个是单个字符,因此 可以 由translate()生成。最后一个不是,也不能。如果您的结果是 HTML,那么您需要<br>。那不是一个字符,当然它不能被translate()函数返回。鉴于这样的差异,你会明白“other such character”是没有意义的。
标签: xml xslt special-characters newline character-replacement