如何从xslt中的字符串中获取所需的名称?

时间:2011-05-09 06:04:38

标签: xslt

例如我有以下字符串:

  1. xoc.coe.hw.ZSBALAJI

  2. hw.cor.exp.nt.ZSSHIVA

  3. 我必须得到最后一个字符串(即第一个是ZSBALAJI,第二个是ZSSHIVA)。我怎么能在xslt中完成。

    提前致谢。

3 个答案:

答案 0 :(得分:1)

以下是针对您的问题的XSLT-1.0解决方案:

<?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>

应用于此文档时:

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

它产生以下结果:

ZSBALAJI
ZSSHIVA

答案 1 :(得分:0)

您可以尝试使用EXSLT tokenize(string, string?)函数来拆分'。'在相关节点上,请参阅this以获取更多信息。

答案 2 :(得分:0)

假设您有以下XML:

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

然后是以下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>

将输出

ZSBALAJI
ZSSHIVA

基本上,您可以使用XPath tokenize函数,然后使用最后一个标记。