1

XSL 1.0 で文字列の分析操作を実行する方法はありますか?たとえば、XSL 2.0 では次のようにすることができます。

  <xsl:analyze-string select="Description" regex="$param1">
    <xsl:matching-substring>
    <span style="background-color: papayawhip;">
<xsl:value-of select="."/></span>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
    <xsl:value-of select="."/>
    </xsl:non-matching-substring>
    </xsl:analyze-string>

したがって、これは Description ノードで param1 を探し、それを に置き換えます<span>。XSL 1.0 でこのようなことを行うことは可能ですか?

4

2 に答える 2

3

次のようなものを使用します。

<xsl:if test="contains(x, $param)">
  <xsl:value-of select="substring-before(x, $param)"/>
  <span><xsl:value-of select="$param"/></span>
  <xsl:value-of select="substring-after(x, $param)"/>
</xsl:if>
于 2012-10-09T19:01:24.893 に答える
1

単純に要素内の部分文字列を探したい場合はDescription、XSLT 1.0 で名前付きの再帰テンプレートを作成することで可能です。

<xsl:stylesheet 
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:param name="param1" select="'foo'"/>

<xsl:template name="wrap">
  <xsl:param name="input"/>
  <xsl:param name="search"/>
  <xsl:param name="wrapper-element" select="'span'"/>
  <xsl:param name="wrapper-style" select="'background-color: papayawhip;'"/>
  <xsl:choose>
     <xsl:when test="not(contains($input, $search))">
       <xsl:value-of select="$input"/>
     </xsl:when>
     <xsl:otherwise>
       <xsl:value-of select="substring-before($input, $search)"/>
       <xsl:element name="{$wrapper-element}">
         <xsl:if test="$wrapper-style">
           <xsl:attribute name="style">
             <xsl:value-of select="$wrapper-style"/>
           </xsl:attribute>
         </xsl:if>
         <xsl:value-of select="$search"/>
       </xsl:element>
       <xsl:call-template name="wrap">
         <xsl:with-param name="input" select="substring-after($input, $search)"/>
         <xsl:with-param name="search" select="$search"/>
         <xsl:with-param name="wrapper-element" select="$wrapper-element"/>
         <xsl:with-param name="wrapper-style" select="$wrapper-style"/>
       </xsl:call-template>
     </xsl:otherwise>
   </xsl:choose>
</xsl:template>

<xsl:template match="Description">
  <div>
    <xsl:call-template name="wrap">
      <xsl:with-param name="input" select="."/>
      <xsl:with-param name="search" select="$param1"/>
    </xsl:call-template>
  </div>
</xsl:template>

</xsl:stylesheet>

そのようなコードは次に変換されます

<Root>
  <Description>foo bar baz foobar test whatever foo</Description>
</Root>

の中へ

  <div><span style="background-color: papayawhip;">foo</span> bar baz <span style="background-color: papayawhip;">foo</span>bar test whatever <span style="background-color: papayawhip;">foo</span></div>

何らかの形でニーズに合わせて適応できる例を挙げてみましょう。これは、XSLT 2.0 の分析文字列を完全に置き換えることを意図したものではありません。

于 2012-10-10T10:48:35.910 に答える