XSLT: замена символов
От: VB_Coder  
Дата: 16.11.08 12:30
Оценка:
Есть вот такой XML

<a>
   Пример текста, пример текста, пример текста, пример текста.
  <b>
    Вот еще немного текста, вложенного в другой тег.
  </b>
</a>


Задача такая, нужно символ "," заменить везде на "<c/>,"

Использовал шаблон для замены текста из книги Валикова, но ничего хорошего не вышло.
Дело в том, что у меня в символ запятой встречается во вложенном теге,
а функция substring-before убирает все теги в переданной ей строке.


 <xsl:template name="replace" match="@*|node()" mode="replace">
 
  <xsl:param name="str">
    <xsl:copy-of select="."/>
  </xsl:param>
      
  <xsl:param name="search-for" select="','"/>

  <xsl:param name="replace-with">
    <xsl:element name="c"/>
  </xsl:param>

  <xsl:choose>

    <xsl:when test="contains($str, $search-for)">
      <xsl:copy-of select="substring-before($str, $search-for)"/>      
      <xsl:copy-of select="$replace-with"/>
      <xsl:call-template name="replace">
        <xsl:with-param name="str" select="substring-after($str, $search-for)"/>
        <xsl:with-param name="search-for" select="$search-for"/>
        <xsl:with-param name="replace-with" select="$replace-with"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:otherwise>
  
    <xsl:call-template name="item">
       <xsl:with-param name="item" select="$str"/>
    </xsl:call-template>
    </xsl:otherwise>
  </xsl:choose>

</xsl:template>

  <xsl:template name="item">
     <xsl:param name="item"/>
     <xsl:param name="delimeter"/>    
    <xsl:copy-of select="$item"/>
    <xsl:copy-of select="$delimeter"/>
   </xsl:template>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.