我有以下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实现这一点?
你应该试试这样的东西:
<xsl:value-of select="substring(name, 1, 4)"/>
你可以在这里找到更多的一般信息。
您感兴趣的不是每个name
的前4个字符,而是前4个从所有连接的名称。所以必须:
- 合并来自所有
name
元素的文本 - 从结果中选取前4个字符
你可以这样做:
<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)"/>
在XSLT2中会更容易:
<xsl:value-of select="substring(string-join(.//name, ''), 1, 4)"/>
因此,也许您应该转到XSLT2?