[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: transforming xhtml question

Subject: Re: transforming xhtml question
From: Mike Brown <mike@xxxxxxxx>
Date: Sun, 23 Mar 2003 16:57:48 -0700 (MST)
tree visualization xhtml
Tyrone wrote:
> I'm doing transformations to some XHTML documents. Basically I need to only
> remove a few attributes and elements from them and leave the document largely
> intact beyond that.

You want to do an identity transformation:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" indent="no"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

This is a recursive copy-through of all nodes from source to result.

Add to it templates that match the elements you want to change. These
templates will match at a higher priority than the template above.

For example, if you want to add a style="font-size: 85%" attribute
to every 'p' element:

  <xsl:template match="p">
    <xsl:copy>
      <xsl:attribute name="style">font-size: 85%</xsl:attribute>
      <xsl:apply-templates select="@*[name() != 'style']|node()"/>
    </xsl:copy>
  </xsl:template>

The apply-templates allows the recursive copy-through to continue
down into the contents of the <p>...</p>. The predicate on the @*
prevents any existing 'style' attribute from overwriting the new
one you just created.

> I'm having problems navigating to the html elment and other elements when I
> leave the Doctype and namespace at the top of the xhtml doc.  I assume I'm
> missing something in my xpath syntax

Yes. In your stylesheet (preferably at the top), bind a prefix to
the namespace that the XHTML elements are in. Use this prefix when
referring to element names in XPath expressions.

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

  <xsl:template match="xhtml:p">
    ...

> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
>     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Note that when you feed this to an XML parser, the DTD is most likely
being read from the w3.org site. I would use a local DTD if possible.

> I've been looking for some kind of XPATH tool that will let me see how a
> document tree is represented in XPATH syntax. If anyone knows of such a tool
> could you post a link?

Various XML editors have tree visualization modes, but you could use the
stylesheets Jeni Tennison and I developed to produce an ASCII art view
that you might find appealing. Download them from http://skew.org/xml/
(ASCII XML Tree Viewer or Pretty XML Tree Viewer... try both)


Mike

-- 
  Mike J. Brown   |  http://skew.org/~mike/resume/
  Denver, CO, USA |  http://skew.org/xml/

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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.