开发者

how to get required name from a string in xslt?

e.g i have following strings:

  1. xoc.coe.hw.ZSBALAJI

  2. hw.cor.exp.nt.ZSSHIVA

开发者_C百科i have to get only last string (i.e. ZSBALAJI from first and ZSSHIVA from second). How can I do it in xslt.

Thanks in advance.


Here is an XSLT-1.0 solution to your problem:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="//string">
        <xsl:call-template name="skipper">
            <xsl:with-param name="source" select="."/>
            <xsl:with-param name="delimiter" select="'.'"/>
        </xsl:call-template>
    </xsl:template>
    <!-- returns the substring after the last delimiter -->
    <xsl:template name="skipper">
        <xsl:param name="source"/>
        <xsl:param name="delimiter"/>
        <xsl:choose>
            <xsl:when test="contains($source,$delimiter)">
                <xsl:call-template name="skipper">
                    <xsl:with-param name="source" select="substring-after($source,$delimiter)"/>
                    <xsl:with-param name="delimiter" select="$delimiter"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$source"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

When applied to this document:

<?xml version="1.0" encoding="UTF-8"?>
<strings>
    <string>xoc.coe.hw.ZSBALAJI</string>
    <string>hw.cor.exp.nt.ZSSHIVA</string>
</strings>

It produces the following result:

ZSBALAJI
ZSSHIVA


Let's assume that you have the following XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <a>xoc.coe.hw.ZSBALAJI</a>
    <a>hw.cor.exp.nt.ZSSHIVA</a>
</root>

Then the following XSLT

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

    <xsl:output method="text"/>

    <xsl:template match="//a">
        <xsl:variable name="parts" select="tokenize(node(), '\.')"/>
        <xsl:variable name="count" select="count($parts)"/>
        <xsl:for-each select="$parts">
            <xsl:if test="position() = $count">
                <xsl:value-of select="."/>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

will ouput

ZSBALAJI
ZSSHIVA

Essentially, you can use XPath tokenize function and then take the last token.


You can try and use EXSLT tokenize(string, string?) function to split by '.' on the relevant node, see this for additional info.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜