第一次转换后的子字符串文本节点



我有以下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

相关内容

  • 没有找到相关文章

最新更新