使用XSLT将标签元素拆分为名称不同的标签

时间:2018-11-05 08:24:42

标签: xml xslt split tags

我有一个<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>

我只需要稍后在不知道单词的情况下对其进行区分即可。 有人可以帮我吗?

1 个答案:

答案 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>

https://xsltfiddle.liberty-development.net/nc4NzRm/1