Leave " alone in transformation

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • LionelAndJen@gmail.com

    Leave " alone in transformation

    I have an XML file that has a free form comment field in which the
    data provider, very kindly, already uses """ when writing
    "doesn't", I have doesn't .

    it's PERFECT, because that xml is then fed to an XSLT sheet that
    transforms this text into a sql insert statement. UNFORTUNATELY, XSLT
    translates doesn't into doesn't in the output, which then
    destroys my sql statement. How do I tell my XSLT to leave well-enough
    alone ? I know it has to be easy, but I just don't get it right now
    in spite of looking online.

    Also, bear in mind I'm your friendly neighborhood XSLT newbie. :)

    Thanks a lot.
  • Martin Honnen

    #2
    Re: Leave " alone in transformation

    LionelAndJen@gm ail.com wrote:
    I have an XML file that has a free form comment field in which the
    data provider, very kindly, already uses """ when writing
    "doesn't", I have doesn't .
    >
    it's PERFECT, because that xml is then fed to an XSLT sheet that
    transforms this text into a sql insert statement. UNFORTUNATELY, XSLT
    translates doesn't into doesn't in the output, which then
    destroys my sql statement. How do I tell my XSLT to leave well-enough
    alone ? I know it has to be easy, but I just don't get it right now
    in spite of looking online.
    No, it is not easy. You can't preserve entity references when parsing
    XML and using XSLT as the XSLT data model does not know any entity
    references. So XSLT uses an XML parser to build its data model, an input
    tree, and then transforms that input tree into a result tree. The result
    tree can then optionally be serialized as XML or HTML or plain text.
    If you want to ensure that certain characters are escaped with entity
    references in the output the XSLT processor creates then you need to
    look at processor specific extensions to do that. Or you can look into
    XSLT 2.0 and character maps http://www.w3.org/TR/xslt20/#character-maps.
    Note that both ways will not simply allow you to preserve entity
    references in the input, instead you will create entity references in
    the output.
    --

    Martin Honnen

    Comment

    • William F Hammond

      #3
      Re: Leave " alone in transformation

      Martin Honnen <mahotrash@yaho o.dewrites:
      .. . .
      >... UNFORTUNATELY, XSLT
      >translates doesn&apos;t into doesn't in the output, which then
      >destroys my sql statement. How do I tell my XSLT to leave well-enough
      >alone ? ...
      .. . .
      references in the output the XSLT processor creates then you need to
      look at processor specific extensions to do that. Or you can look into
      XSLT 2.0 and character maps
      http://www.w3.org/TR/xslt20/#character-maps. Note that both ways will
      not simply allow you to preserve entity references in the input,
      instead you will create entity references in the output.
      I suppose sql language is not usually envisioned as a translation
      target in the xml world.

      Nuggets of CDATA in an xml document are not supposed to be decision
      points. Nonetheless it's possible but cpu-expensive to look at
      individual characters. (The expense may be reasonable in the OP's
      context.)

      This is why the exclusion of SDATA character entities was controversial
      in early days.

      -- Bill

      Comment

      • Joe Fawcett

        #4
        Re: Leave &amp;quot; alone in transformation



        "William F Hammond" <hammond@csc.al bany.eduwrote in message
        news:i7r65a9irw .fsf@hilbert.ma th.albany.edu.. .
        Martin Honnen <mahotrash@yaho o.dewrites:
        >. . .
        >>... UNFORTUNATELY, XSLT
        >>translates doesn&apos;t into doesn't in the output, which then
        >>destroys my sql statement. How do I tell my XSLT to leave well-enough
        >>alone ? ...
        . . .
        >references in the output the XSLT processor creates then you need to
        >look at processor specific extensions to do that. Or you can look into
        >XSLT 2.0 and character maps
        >http://www.w3.org/TR/xslt20/#character-maps. Note that both ways will
        >not simply allow you to preserve entity references in the input,
        >instead you will create entity references in the output.
        >
        I suppose sql language is not usually envisioned as a translation
        target in the xml world.
        >
        I think it quite a common requirement though.
        I just do the usual sanitisation on the SQL though, replacing a single quote
        with two single quotes before running it.
        If the OP is is using XSLT 2.0 it's trivial with the replace function, if
        not there are plenty of example templates online that do string replacement.

        --

        Joe Fawcett


        Comment

        Working...