【问题标题】:Split tag elements into differently named tags using XSLT使用 XSLT 将标签元素拆分为不同名称的标签
【发布时间】:2018-11-05 08:24:41
【问题描述】:

我有一个<Content> 标签,其中有一个字符串,例如:

"Hello how do you do END"

我想要做的是用“\t”将该字符串拆分,并将每个单词放入一个不同的命名标签中,如下所示:

<a>Hello</a>
<b>how</b>
<c>do</c>

我使用 tokenize 拆分它们:

<xsl:template match="*:Content/text()">
   <xsl:for-each select="tokenize(.,'\t')">
    <b xmlns="">
     <xsl:sequence select="."/>
    </b>
   </xsl:for-each>
</xsl:template>

我只需要以后能够在不知道它们的情况下区分这些单词。 有人可以帮我吗?

【问题讨论】:

    标签: xml xslt split tags


    【解决方案1】:

    您可以使用正确的格式格式化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

    【讨论】:

    • 第一个正是我需要的。只是我需要 XSLT 为版本 2 或 1,因为格式整数无法识别。
    • @banb,查看编辑,如果你有tokenize,你至少应该有XSLT 2,并且可以根据需要使用xsl:number 来格式化position()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2021-05-09
    • 2017-05-19
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多