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[(_at_)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(_at_)louiorio(_dot_)com> 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.
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--