我有一个<Content>
标记,其中有一个字符串,例如:
"Hello how do you do END"
我想做的就是用“ \ t”分割字符串,然后将每个单词放入不同的命名标签中,如下所示:
<a>Hello</a>
<b>how</b>
<c>do</c>
我使用令牌化将它们拆分:
<xsl:template match="*:Content/text()">
<xsl:for-each select="tokenize(.,'\t')">
<b xmlns="">
<xsl:sequence select="."/>
</b>
</xsl:for-each>
</xsl:template>
我只需要稍后在不知道单词的情况下对其进行区分即可。 有人可以帮我吗?
答案 0 :(得分:0)
您可以使用正确的格式来格式化position()
,例如
<xsl:template match="test">
<xsl:copy>
<xsl:for-each select="tokenize(., '\s+')">
<xsl:element name="{format-integer(position(), 'a')}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:copy>
</xsl:template>
https://xsltfiddle.liberty-development.net/nc4NzRm
对于XSLT 2,您可以使用xsl:number
来格式化position()
:
<xsl:template match="test">
<xsl:copy>
<xsl:for-each select="tokenize(., '\s+')">
<xsl:variable name="element-name">
<xsl:number format="a" value="position()"/>
</xsl:variable>
<xsl:element name="{$element-name}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:copy>
</xsl:template>
http://xsltransform.hikmatu.com/pPqsHSV
但是,简单地使用属性中的位置创建具有相同名称的元素可能更有意义:
<xsl:template match="test">
<xsl:copy>
<xsl:for-each select="tokenize(., '\s+')">
<word pos="{position()}">
<xsl:value-of select="."/>
</word>
</xsl:for-each>
</xsl:copy>
</xsl:template>