例如,我有以下字符串:如何從xslt中的字符串獲取所需的名稱?
xoc.coe.hw.ZSBALAJI
hw.cor.exp.nt.ZSSHIVA
我得只剩下最後的字符串(即ZSBALAJI從第一個和ZSSHIVA從第二個)。我怎樣才能在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
功能,然後拿最後一個標記。
您可以嘗試使用EXSLT tokenize(string, string?)
函數按'。'拆分。在相關節點上,請參閱this瞭解更多信息。
下面是一個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