我有一个xml节点,如下所示
<root>
<element>ABC,EFG, XYZ,<element>
</root>
我想删除最后一个&#39;,&#39;来自。 结果应该是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>
答案 0 :(得分:5)
您可以结合使用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
元素(不以逗号结尾的元素)将由default template rules处理,它将完整打印出所有文字内容。
答案 1 :(得分:0)
使用此输入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>