Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

xml - XSLT 1.0 Translate String - Change Character to New Line

I am hoping this is a simple one, though it seems it often isn't...

I am working with XLST 1.0 and I have a string which I need to translate. This string is a user-entered text field. It contains several smaller strings separated by a delimiter. (In this case, it's "|".) The length of this string and the number of special characters varies widely.

(This field is similar to a CSV list, however, rather than using a comma as the delimiter, the "|" is the delimiter.)

I need to learn how to change this delimiter to <br>.

I've tried using the following XSL to achieve this:

<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, '|', '&#xA;&#xD;')"/>

When this code is run, the output is:

String1String2String3

The expected/desired output is:

String1
String2
String3

Any and all help with this would be greatly appreciated!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The translate() function maps from character to character. In your case, you're replacing | with &#xA; (the first character), which is line feed (LF). This may work on Unix systems where LF commonly marks end of line, but it won't work on Windows, for example, where the end of line marker is CR+LF (&#xD;&#xA;).

For further details on EOLs in XML, see How to add a newline (line break) in XML file?

For replacing a character with a string in XSLT 1.0, see Michael's recursive template for replace.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...