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

发布于 2024-11-05 20:29:19 字数 204 浏览 0 评论 0原文

例如我有以下字符串:

  1. xoc.coe.hw.ZSBALAJI

  2. hw.cor.exp.nt.ZSSHIVA

我必须只获取最后一个字符串(即来自第一个字符串的 ZSBALAJI 和来自第二个字符串的 ZSSHIVA)。我怎样才能在xslt.xml中做到这一点?

提前致谢。

e.g i have following strings:

  1. xoc.coe.hw.ZSBALAJI

  2. hw.cor.exp.nt.ZSSHIVA

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

过去的过去 2024-11-12 20:29:19

以下是针对您的问题的 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

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
诺曦 2024-11-12 20:29:19

假设您有以下 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 函数,然后获取最后一个标记。

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.

临走之时 2024-11-12 20:29:19

您可以尝试使用 EXSLT tokenize(string, string?) 函数按 '.' 进行分割在相关节点上,请参阅了解更多信息。

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文