如何在XSLT中提取部分内容



我想提取元素值的一部分,并将其作为属性分配给它。

来源:

 <www>
      <sss>
             <eee>XML ELEMENT VALUE 
             [part].HTML element value [HTPART]. 
               HTML element value [HTPART2].
             </eee>
     </sss>
 </www>

它继续这样。方括号[]中的内容可能会出现很多次。并且在源中还有许多额外的空间。我想删除多余的空格并像这样显示内容。

输出要求:

      <fff>XML ELEMENT VALUE<ggg name="part"/>.HTML element value<ggg name="HTPART"/>.HTML element value<ggg   name="HTPART2"/>. </fff>

有人能建议怎么做吗。我是XSLT的新手。

提前谢谢。

字符串处理并不是XSLT的强项,毕竟它是一种XML处理语言,而不是通用语言。

不过,您的问题可以通过递归来解决:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
  <xsl:template match="eee">
    <fff>
      <xsl:call-template name="process">
        <xsl:with-param name="text" select="text()" />
      </xsl:call-template>
    </fff>
  </xsl:template>
  <xsl:template name="process">
    <xsl:param name="text" select="''" />
    <xsl:variable name="head" select="substring-before($text, '[')" />
    <xsl:variable name="tag"  select="substring-before(substring-after($text, '['), ']')" />
    <xsl:variable name="tail" select="substring-after($text, ']')" />
    <xsl:choose>
      <xsl:when test="$head != '' and $tag != ''">
        <xsl:value-of select="$head" />
        <ggg name="{$tag}" />
        <!-- recursive step: process the remainder of the string -->
        <xsl:call-template name="process">
          <xsl:with-param name="text" select="$tail" />
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

以上模板输出,供您输入:

 <fff>XML ELEMENT VALUE 
 <ggg name="part"/>.HTML element value <ggg name="HTPART"/>. 
   HTML element value <ggg name="HTPART2"/>.
 </fff>

相关内容

  • 没有找到相关文章

最新更新