xslt - separating element and text

Discussion in 'XML' started by Jijai, Sep 18, 2004.

  1. Jijai

    Jijai Guest

    Hi All,

    I need your help. I have spent almost one day to figure this out, here
    is my problem:

    In my dtd:

    <!ELEMENT para (#PCDATA | math | link)+>

    In my xml:

    <para>
    sentence1
    <math>math equation</math>
    sentence2
    <link href="somewhere">link</link>
    sentence3
    </para>

    I want to transform my xml into html by using an xsl, and i want to
    change every <link> in <para> value there into <a href=".."> form. And
    i also want to copy everything inside <math> into my html page. Is
    there any solution for this?
    Thanks in advance for your help.

    regards,
    Jijai
     
    Jijai, Sep 18, 2004
    #1
    1. Advertising

  2. Jijai wrote:


    > I need your help. I have spent almost one day to figure this out, here
    > is my problem:
    >
    > In my dtd:
    >
    > <!ELEMENT para (#PCDATA | math | link)+>
    >
    > In my xml:
    >
    > <para>
    > sentence1
    > <math>math equation</math>
    > sentence2
    > <link href="somewhere">link</link>
    > sentence3
    > </para>
    >
    > I want to transform my xml into html by using an xsl, and i want to
    > change every <link> in <para> value there into <a href=".."> form. And
    > i also want to copy everything inside <math> into my html page. Is
    > there any solution for this?


    You haven't shown us what HTML output you want so I can only guess:

    <xsl:template match="para">
    <p>
    <xsl:apply-templates />
    </p>
    </xsl:template>

    <xsl:template match="link">
    <a href="{@href}"><xsl:value-of select="." /></a>
    </xsl:template>

    <xsl:template match="math">
    <xsl:apply-templates />
    </xsl:template>


    --

    Martin Honnen
    http://JavaScript.FAQTs.com/
     
    Martin Honnen, Sep 18, 2004
    #2
    1. Advertising

  3. Jijai

    Jijai Guest

    Martin Honnen <> wrote in message news:<414c5017$0$18550$-online.net>...
    > Jijai wrote:
    >
    >
    > > I need your help. I have spent almost one day to figure this out, here
    > > is my problem:
    > >
    > > In my dtd:
    > >
    > > <!ELEMENT para (#PCDATA | math | link)+>
    > >
    > > In my xml:
    > >
    > > <para>
    > > sentence1
    > > <math>math equation</math>
    > > sentence2
    > > <link href="somewhere">link</link>
    > > sentence3
    > > </para>
    > >
    > > I want to transform my xml into html by using an xsl, and i want to
    > > change every <link> in <para> value there into <a href=".."> form. And
    > > i also want to copy everything inside <math> into my html page. Is
    > > there any solution for this?

    >
    > You haven't shown us what HTML output you want so I can only guess:
    >
    > <xsl:template match="para">
    > <p>
    > <xsl:apply-templates />
    > </p>
    > </xsl:template>
    >
    > <xsl:template match="link">
    > <a href="{@href}"><xsl:value-of select="." /></a>
    > </xsl:template>
    >
    > <xsl:template match="math">
    > <xsl:apply-templates />
    > </xsl:template>


    Oops, sorry, forgot to give the output, here is the output that i
    want:

    <p>
    sentence1 <math>...</math> sentence2 <a href="..">link</a> sentence3
    </p>

    Anyway, i already tried your suggestion but the <math> tag is not
    included in the output, i made a modification and it works :) thanks
    man.

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

    <xsl:eek:utput method="html"/>
    <xsl:template match="doc">
    <p>
    <xsl:apply-templates />
    </p>
    </xsl:template>

    <xsl:template match="link">
    <a href="{@href}"><xsl:value-of select="." /></a>
    </xsl:template>

    <xsl:template match="math">
    <xsl:apply-templates select="." mode="math-ns-copy"/>
    </xsl:template>

    <xsl:template match="*" mode="math-ns-copy">
    <xsl:element name="{local-name()}">
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates mode="math-ns-copy"/>
    </xsl:element>
    </xsl:template>

    </xsl:stylesheet>
     
    Jijai, Sep 19, 2004
    #3
  4. Jijai

    Peter Flynn Guest

    Jijai wrote:
    [...]
    > <xsl:template match="*" mode="math-ns-copy">
    > <xsl:element name="{local-name()}">
    > <xsl:copy-of select="@*"/>
    > <xsl:apply-templates mode="math-ns-copy"/>
    > </xsl:element>
    > </xsl:template>


    What's wrong with using this instead?

    <xsl:template match="math">
    <math>
    <xsl:apply-templates/>
    </math>
    </xsl:template>

    Entia non sunt multiplicanda præter necessitatem.

    ///Peter
    --
    "The cat in the box is both a wave and a particle"
    -- Terry Pratchett, introducing quantum physics in _The Authentic Cat_
     
    Peter Flynn, Sep 22, 2004
    #4
    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. Rob Cowie
    Replies:
    14
    Views:
    425
    Rob Cowie
    Mar 6, 2006
  2. HANM
    Replies:
    2
    Views:
    729
    Joseph Kesselman
    Jan 29, 2008
  3. tshad
    Replies:
    2
    Views:
    703
    tshad
    Jun 19, 2009
  4. Pali
    Replies:
    10
    Views:
    1,325
    Default User
    Nov 8, 2010
  5. Art Merkel
    Replies:
    4
    Views:
    139
    Adam Funk
    Feb 6, 2007
Loading...

Share This Page