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

Re: html as input to xslt

Subject: Re: html as input to xslt
From: Lou Iorio <lou@xxxxxxxxxxxx>
Date: Tue, 04 Sep 2007 19:07:12 -0400
Re:  html as input to xslt
Thanks for the help.

Here is more specifically what I'm trying to do. I have an xhtml file (created from an html file using tidy:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>yellow</title>
</head>
<body>
 <div class="navheader">
   <p>navheader</p>
 </div>
 <div class="something">
   <p>something</p>
 </div>
 <p>plain</p>
</body>
</html>

I want to change it so the file is copied exactly, except that the <div class="navheader"> is spit out in place,
followed by more markup. Here's what I'm trying:


<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml" version="1.0">
 <xsl:output method="html" />
 <xsl:template match="node()|@*">
   <xsl:copy>
     <xsl:apply-templates select="@*" />
     <xsl:apply-templates />
   </xsl:copy>
 </xsl:template>
 <xsl:template match="//div[@class='header']">
   <xsl:copy-of select="." />
   <p>other stuff</p>
 </xsl:template>
</xsl:stylesheet>

And here's what I'm getting:

>xsltproc test.xsl test.html
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>yellow</title>
</head>
<body>
 <div class="navheader">
   <p>navheader</p>
 </div>
 <div class="something">
   <p>something</p>
 </div>
 <p>plain</p>
</body>
</html>

Note that the <p>other stuff</p> is not in the output. I'm sure it's something simple, but
I don't get it.


Lou
--------------------------------------------------------------------------------
Andrew Welch wrote:
On 8/31/07, Lou Iorio <lou@xxxxxxxxxxxx> wrote:
This is probably a naive question, but I could not find it in the archives.

Can I transform xhtml documents using xsl, or does this just not make sense?

I'm trying to replace a tag with a specified attribute to another tag.

The only xpath that does anything is *, which dumps the text of the html.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
  <xsl:template match="/">
    <verse>
    <xsl:value-of select="*"/>
    </verse>
  </xsl:template>
</xsl:stylesheet>

I'm using xsltproc and saxon8, both of which do the same thing.

xhtml is in the namespace "http://www.w3.org/1999/xhtml" so you'll need to modify your stylesheet to match elements in that namespace eg:

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

 <xsl:template match="/">
   <verse>
   <xsl:value-of select="xhtml:html/xhtml:body/xhtml:div/blah"/>
   </verse>
 </xsl:template>

</xsl:stylesheet>

Note the namespace declaration on the xsl:stylesheet element and the
modified xpath.

In XSLT 2.0 there's the xpath-default-namespace which is probably
better than bloating your  XPaths with the prefix.

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

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

Buy Stylus Studio Now

Cast Your Vote

We need your help – Vote for DataDirect XML Products!

  • Best SOA or XML site

Winners and finalists announced at SOA World Conference in November.

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-2007 All Rights Reserved.