How I can parse Pipeline sign from string in xslt

2019-09-11 03:56发布

问题:

How I can parse pipeline sign from fields in xslt. e.g.

dummy1|dummy2|dummy3|dummy4

Regards, Sarah

回答1:

If you use an XSLT 2.0 processor you can use the tokenize function (http://www.w3.org/TR/xpath-functions/#func-tokenize) e.g. with an input of

<foo>dummy1|dummy2|dummy3|dummy4</foo>

you can match

<xsl:template match="foo">
  <xsl:value-of select="tokenize(., '\|')"/>
</xsl:template>

to output dummy1 dummy2 dummy3 dummy4. If you use an XSLT 1.0 processor you can check whether it supports an extension function like http://www.exslt.org/str/functions/tokenize/ or you need to write a recursive, named template splitting up the input.



回答2:

In xlst 1.0 I usually use recursive call of named template, e.g.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:variable name="dummyVar" select="'dummy1|dummy2|dummy3|dummy4'" />
    <xsl:variable name="delimiter" select="'|'" />

    <xsl:template match="/">
        <dummies>
            <xsl:call-template name="parseDummy">
                <xsl:with-param name="parsedString" select="$dummyVar" />
            </xsl:call-template>
        </dummies>
    </xsl:template>

    <xsl:template name="parseDummy">
        <xsl:param name="parsedString" />
        <xsl:choose>
            <xsl:when test="contains($parsedString, $delimiter)">
                <xsl:element name="{substring-before($parsedString, $delimiter)}" />
                <xsl:call-template name="parseDummy">
                    <xsl:with-param name="parsedString" select="substring-after($parsedString, $delimiter)" />
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:element name="{$parsedString}" />
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

It's on you what you need to do with parsed values, in example I construct elements with names of dummies.

Be careful about context which is changing.



标签: xslt