我有一个如下的xml节点
<root>
<element>ABC,EFG, XYZ,<element>
</root>
我想删除最后一个','从。结果应该是ABC EFG XYZ我想使用有限制的XSL 1.0。
XSL我正在尝试使用
<xsl:template match="/">
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:for-each select="//element">
<xsl:if test="contains(substring(., string-length(.) - 1),$smallcase)">
<xsl:value-of select="substring(., 1, string-length(.) - 1)"/>
</xsl:if>
<xsl:value-of select="substring(., string-length(.) - 1)"/>
</xsl:for-each>
</xsl:template>
您可以使用substring
和string-length
的组合:
substring(., 1, string-length(.) - 1)
我不确定您当前的XSLT正在尝试做什么-它将简单地打印每个element
元素的最后两个字符-但尝试这样做:
<xsl:template match="/">
<xsl:apply-templates select="//element"/>
</xsl:template>
<!-- match elements whose content ends with a comma, and strip it off -->
<xsl:template match="element[substring(., string-length()) = ',']">
<xsl:value-of select="substring(., 1, string-length(.) - 1)" />
</xsl:template>
其他element
元素(不以逗号结尾的)将由默认模板规则处理,该规则将完整打印所有文本内容。
使用这个输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<element>ABC,EFG, XYZ,</element>
<element>ABC,EFG, XYZ</element>
</root>
和这个样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="root/element">
<xsl:copy>
<xsl:call-template name="tokenizeString">
<xsl:with-param name="list" select="."/>
<xsl:with-param name="delimiter" select="','"/>
</xsl:call-template>
</xsl:copy>
</xsl:for-each>
</xsl:template>
<xsl:template name="tokenizeString">
<!--passed template parameter -->
<xsl:param name="list"/>
<xsl:param name="delimiter"/>
<xsl:choose>
<xsl:when test="contains($list, $delimiter) and substring-after($list,$delimiter) != ''">
<!-- get everything in front of the first delimiter -->
<xsl:value-of select="substring-before($list,$delimiter)"/>
<xsl:text>,</xsl:text>
<xsl:call-template name="tokenizeString">
<!-- store anything left in another variable -->
<xsl:with-param name="list" select="normalize-space(substring-after($list,$delimiter))"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$list = ''"/>
<xsl:otherwise>
<xsl:value-of select="translate($list, ',', '')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
输出如下:
<element>ABC,EFG,XYZ</element>
<element>ABC,EFG,XYZ</element>