replacing &lt; with < using xslt

Discussion in 'XML' started by tentstitcher@gmail.com, May 19, 2006.

  1. Guest

    Hi all:

    I have a source xml document with an element of type string. This
    element contains something like the following:
    <stringData>
    &lt;Header&gt; &lt;Body&gt;
    </stringData>

    I would like to apply an XSLT and replace all occurances of &lt; with <
    and &gt; with >.

    I tried the following but without success:

    <xsl:template match="stringData">
    <xsl:variable name="lessThan" select='<'/>
    <xsl:value-of select="translate(text()[1], '&lt;', $lessThan)"/>
    </xsl:template>

    I'd appreciate any help.

    Thanks
     
    , May 19, 2006
    #1
    1. Advertising

  2. wrote:
    > Hi all:
    >
    > I have a source xml document with an element of type string. This
    > element contains something like the following:
    > <stringData>
    > &lt;Header&gt; &lt;Body&gt;
    > </stringData>
    >
    > I would like to apply an XSLT and replace all occurances of &lt; with <
    > and &gt; with >.


    you don't need to : as this is not markup but text, escaping < and >
    with &lt; and &gt; is expected by parsers and applications

    if you have to produce a text output instead of an XML output, just do
    that :

    <xsl:eek:utput method="text"/>
    <xsl:template match="stringData">
    <xsl:value-of select="text()"/>
    </xsl:template>

    the output will be :
    <Header> <Body>

    >
    > I tried the following but without success:
    >
    > <xsl:template match="stringData">
    > <xsl:variable name="lessThan" select='<'/>

    illegal, use &lt;

    > <xsl:value-of select="translate(text()[1], '&lt;', $lessThan)"/>
    > </xsl:template>
    >
    > I'd appreciate any help.
    >
    > Thanks
    >



    --
    Cordialement,

    ///
    (. .)
    --------ooO--(_)--Ooo--------
    | Philippe Poulard |
    -----------------------------
    http://reflex.gforge.inria.fr/
    Have the RefleX !
     
    Philippe Poulard, May 19, 2006
    #2
    1. Advertising

  3. In article <>,
    <> wrote:

    >I would like to apply an XSLT and replace all occurances of &lt; with <
    >and &gt; with >.


    You seem to want to transform character data into markup. XSLT is not
    well suited to this, since it expects to be working with existing
    document structure, and you are giving it (in effect) strings.

    The simplest solution, if you can get it to work, is just to copy
    the strings with output escaping disabled.

    <xsl:value-of select="text()" disable-output-escaping="yes"/>

    But you may have problems if the strings contain ampersands, since
    those will not be escaped either.

    The other approach is essentially to parse the text and create the
    corresponding elements.

    -- Richard
     
    Richard Tobin, May 19, 2006
    #3
  4. Guest

    Thanks for reply. The source document and the target document are both
    SOAP messages. The <stringData> element is read out of the source's
    SOAP Body and has to be placed in the target's SOAP Body. The &lt; and
    &gt; have to be converted before being added to the target SOAP body so
    that the body now contains an new xml element.

    I tried the suggestion, yet the SOAP output of the XSLT retains the
    &lt; and &gt; occurances.

    Thanks
     
    , May 19, 2006
    #4
  5. Guest

    Richard,

    Thanks for the suggestion. Using <xsl:value-of select="text()"
    disable-output-escaping="yes"/> did the job.

    Appreciate it!
     
    , May 19, 2006
    #5
  6. wrote:
    > Thanks for reply. The source document and the target document are both
    > SOAP messages. The <stringData> element is read out of the source's
    > SOAP Body and has to be placed in the target's SOAP Body. The &lt; and
    > &gt; have to be converted before being added to the target SOAP body so
    > that the body now contains an new xml element.


    as Richard said, you can try :
    <xsl:value-of select="text()" disable-output-escaping="yes"/>
    but the output will be broken if the tags are not well-balanced, which
    is the case in your example

    you should consider an alternative tool such as RefleX (
    http://reflex.gforge.inria.fr/ ) that can fix invalid markup thanks to
    an HTML parser ; the process would be :

    <xcl:parse name="input" source="file:///path/to/input.xml"/>
    <xcl:parse-html name="data" text-source="{ string( $input/stringData ) }"/>
    <xcl:document name="result">
    <stringData>
    { $data }
    </stringData>
    </xcl:document>
    <xcl:transform source="{ $result }" output="file:///path/to/result"/>

    there are also means to update the $input, by replacing the old content
    of <stringData> with the new one, made of markup

    >
    > I tried the suggestion, yet the SOAP output of the XSLT retains the
    > &lt; and &gt; occurances.
    >
    > Thanks
    >


    --
    Cordialement,

    ///
    (. .)
    --------ooO--(_)--Ooo--------
    | Philippe Poulard |
    -----------------------------
    http://reflex.gforge.inria.fr/
    Have the RefleX !
     
    Philippe Poulard, May 19, 2006
    #6
  7. Peter Flynn Guest

    wrote:
    > Hi all:
    >
    > I have a source xml document with an element of type string. This
    > element contains something like the following:
    > <stringData>
    > &lt;Header&gt; &lt;Body&gt;
    > </stringData>


    See http://xml.silmaril.ie/authors/html/

    ///Peter
     
    Peter Flynn, May 19, 2006
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Stylus Studio
    Replies:
    0
    Views:
    766
    Stylus Studio
    Aug 3, 2004
  2. Benjamin Hillsley
    Replies:
    3
    Views:
    1,748
    Dimitre Novatchev
    Sep 25, 2003
  3. C Gillespie

    Replacing parts of xml with xslt

    C Gillespie, Jul 12, 2004, in forum: XML
    Replies:
    1
    Views:
    441
    Robin Johnson
    Jul 17, 2004
  4. Replies:
    2
    Views:
    739
    Henry S. Thompson
    Oct 19, 2005
  5. Rob Meade

    Replacing - and not Replacing...

    Rob Meade, Apr 5, 2005, in forum: ASP General
    Replies:
    5
    Views:
    314
    Chris Hohmann
    Apr 11, 2005
Loading...

Share This Page