xsl-list
[Top] [All Lists]

RE: match text node

2003-10-13 05:48:58

-----Original Message-----
From: saigo(_at_)nevatravel(_dot_)ru [mailto:saigo(_at_)nevatravel(_dot_)ru]
Sent: 13 October 2003 13:11
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] match text node


Hello,

I have document like:
<Descr>
       valid html
</Descr>
"valid html" - I mean every html (xml-valid) you can imagine with no
limitation at all. Of course, there are some texts. And there may be
any nodes inside text and so on.

My task: I need to copy whole document (all nodes and all attributes)
but in text nodes I need to delete all &#xA; marks.
----------------------------------------------------------------------------------------------------------------------------------------

try something like this, you need to apply-templates then do an identify 
transform, your call template naturally matches text() so its fine. I also 
removed the mode attribute for replace template...not needed.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
        
        <xsl:template match="/">
                <xsl:apply-templates/>
        </xsl:template>
        
<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template name="replace" match="text()">
        <xsl:param name="str" select="."/>
        <xsl:param name="search-for" select="'&#xA;'"/>
        <xsl:param name="replace-with">
                  <xsl:text/>
        </xsl:param>
        <xsl:choose>
                <xsl:when test="contains($str,$search-for)">
                        <xsl:value-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:value-of select="$str"/>
                </xsl:otherwise>
        </xsl:choose>
</xsl:template>
                
</xsl:stylesheet>

untested, and make sure you look at the raw output to ensure that they have 
indeed been replaced I would put a visible value in e.g.

        <xsl:param name="replace-with">
        testing testing   <xsl:text/>
        </xsl:param>

good luck, Jim Fuller



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>