如何从xslt中的字符串获取所需的名称?
问题描述:
例如,我有以下字符串:如何从xslt中的字符串获取所需的名称?
xoc.coe.hw.ZSBALAJI
hw.cor.exp.nt.ZSSHIVA
我得只剩下最后的字符串(即ZSBALAJI从第一个和ZSSHIVA从第二个)。我怎样才能在xslt中做到这一点。
在此先感谢。
答
让我们假设你有以下的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
功能,然后拿最后一个标记。
答
下面是一个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
在哪里XML和代码,你已经尝试过呢? – 2011-05-09 07:16:25
答案很大程度上取决于您使用的是XSLT 1.0还是2.0。 – 2011-05-09 09:52:22