как получить требуемое имя из строки в xslt? - PullRequest
0 голосов
/ 09 мая 2011

например, у меня есть следующие строки:

  1. xoc.coe.hw.ZSBALAJI

  2. hw.cor.exp.nt.ZSSHIVA

мне нужно получить только последнюю строку (т.е. ZSBALAJI из первого и ZSSHIVA из второго).Как мне это сделать в xslt.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 09 мая 2011

Вот решение 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
0 голосов
/ 09 мая 2011

Предположим, у вас есть следующий 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 и затем взять последний токен.

0 голосов
/ 09 мая 2011

Вы можете попробовать использовать функцию EXSLT tokenize(string, string?), чтобы разделить на '.' на соответствующем узле см. this для дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...