xsl-list
[Top] [All Lists]

xhtml xslt?

2004-08-25 12:56:16
Hi all,

Anyone know of a generic XHTML XSLT? My thought is
this: I often use XHTML inside of custom XML documents
adhering to a custom DTD.

Consider this XML chunk:

<Content>
    <Header Title="What is the OBPR?" />
    <Section>
        <p>Throughout most of history, human beings have
viewed gravity as an inescapable constant. Gravity has
also profoundly affected the way life on Earth has
evolved.</p>
<p>OBPR works to answer these simple, yet compelling
questions:</p>

                        <ol>
                                <li>How can we assure the survival of humans
traveling far from Earth?</li>
                                <li>How does life respond to gravity and space
environments?</li>
                                <li>What new opportunities can research bring to
expand understanding of the laws of nature and enrich
lives on Earth?</li>
                                <li>What technology must we create to enable the
next explorers to go beyond where we have
been?</ListItem>
                                <li> How can we educate and inspire the next
generation to take the journey? </li>

                        </ol>
To output these XHTML elements, I have to create
templates in my XSLT to handle them. What I would like
to do is to find or write one XSLT that I can import
in all of my XSLTs to handle all XHTML output in all
of my XML documents that use XHTML.

I started to create an XSLT to accomplish this:

<!-- br -->
<xsl:template match="xhtml:br">
        <xsl:choose>
                <xsl:when test="normalize-space(@clear)">
                        <br clear="{(_at_)clear}" />
                </xsl:when>
                <xsl:otherwise>
                        <br />
                </xsl:otherwise>
        </xsl:choose>
</xsl:template>

<!-- pre -->
<xsl:template match="xhtml:pre">
        <pre><xsl:apply-templates /></pre>
</xsl:template>

<!-- a -->
<xsl:template match="xhtml:a">
        <a>
        <xsl:if test="normalize-space(@href)">
                <xsl:attribute name="href"><xsl:value-of
select="@href" /></xsl:attribute>
        </xsl:if>
        <xsl:if test="normalize-space(@class)">
                <xsl:attribute name="class"><xsl:value-of
select="@class" /></xsl:attribute>
        </xsl:if>
        <xsl:if test="normalize-space(@target)">
                <xsl:attribute name="target"><xsl:value-of
select="@target" /></xsl:attribute>
        </xsl:if>
        <xsl:if test="normalize-space(@id)">
                <xsl:attribute name="id"><xsl:value-of select="@id"
/></xsl:attribute>
        </xsl:if>
        <xsl:if test="normalize-space(@name)">
                <xsl:attribute name="name"><xsl:value-of
select="@name" /></xsl:attribute>
        </xsl:if>
        <xsl:apply-templates />
        </a>
</xsl:template>

but I am thinking that I could do something more
generic like this instead:

<!-- copy all nodes and attributes -->
        <xsl:template match="xhtml:node()|@*">
                <!--<xsl:message>Element <xsl:value-of
select="local-name()"/></xsl:message>-->
                <xsl:copy>
                        <xsl:apply-templates select="@*|xhtml:node()"/>
                </xsl:copy>
        </xsl:template>

However, the above does a copy, which is not what I
want, as an XHTML element may contain a custom element
inside of it, so I really need to do an
apply-templates instead. Also, I believe the above
will copy all attributes on all nodes right, when I
only want to copy the attributes on xhtml: nodes.

Ideas anyone? Has anyone tackled this issue already?

thanks,

--Nathan


                
_______________________________
Do you Yahoo!?
Win 1 of 4,000 free domain names from Yahoo! Enter now.
http://promotions.yahoo.com/goldrush


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