我有以下XML
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<element>
<name>abc</name>
</element>
<element>
<name>de</name>
</element>
<element>
<name>fg</name>
</element>
<element>
<name>ijkl</name>
</element>
</foo>
我想连接所有名称,但只从该值中获取前四个字符(不是前四个元素,而是字符)。所以输出应该看起来像
<something>abcd</something>
这就是我所拥有的。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/foo">
<something>
<xsl:for-each select="element">
<xsl:value-of select="name"/>
</xsl:for-each>
</something>
</xsl:template>
</xsl:stylesheet>
我的问题是我不知道如何在XSLT处理期间只选择前四个字母。有没有办法用XSLT实现这一目标?
答案 0 :(得分:1)
答案 1 :(得分:0)
您不感兴趣的是每个name
的前4个字符,而是前4个字符
从所有连接的名称。所以必须:
name
元素的文字。你可以这样做:
<xsl:variable name="txt">
<xsl:for-each select=".//name">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="substring($txt,1,4)"/>
在 XSLT 2 中,它会更容易:
<xsl:value-of select="substring(string-join(.//name, ''), 1, 4)"/>
所以也许你应该继续 XSLT 2 ?