[jdom-interest] builders not preserving namespace attributes in xsl
files
Brett McLaughlin
brett.mclaughlin at lutris.com
Wed Sep 6 14:40:14 PDT 2000
Ed Morehouse wrote:
>
> I came accross this problem when i tried to build an org.jdom.Document out of an
> xsl file. Both DOMBuilder and SAXBuilder seem to be ignoring all namespace
> attributes except for the one for xsl itself. Here is an example:
Get the latest version from CVS - this was a bug that just got a fix
done this week.
Let us know if that works.
-Brett
>
> [ed at evilgenius xml]$ java -classpath
> .:/usr/local/java/jdom/build/jdom.jar:/usr/local/java/xerces/xerces.jar BugDemo
> foo-html.xsl
>
> ----------------------------------------
>
> here's an XML file:
>
> ----------------------------------------
>
> <?xml version="1.0"?>
>
> <xsl:stylesheet
> xmlns:JavaXML="http://www.oreilly.com/catalog/javaxml/"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:foo="http://www.foo.com/bar"
> version="1.0">
>
> <xsl:template match="JavaXML:Book">
> <html>
> <head>
> <title><xsl:value-of select="JavaXML:Title" /></title>
> </head>
> <body>
> <xsl:apply-templates select="*[not(self::JavaXML:Title)]" />
> </body>
> </html>
> </xsl:template>
>
> </xsl:stylesheet>
>
> ----------------------------------------
>
> here's the same file after the SAXBuilder has its way with it:
>
> ----------------------------------------
>
> <?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
>
> <xsl:template match="JavaXML:Book">
> <html>
> <head>
> <title><xsl:value-of select="JavaXML:Title" /></title>
> </head>
> <body>
> <xsl:apply-templates select="*[not(self::JavaXML:Title)]" />
> </body>
> </html>
> </xsl:template>
>
> </xsl:stylesheet>
> ----------------------------------------
>
> here's the same file after the DOMBuilder has its way with it:
>
> ----------------------------------------
>
> <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE xsl:stylesheet><xsl:stylesheet
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
>
> <xsl:template match="JavaXML:Book">
> <html>
> <head>
> <title><xsl:value-of select="JavaXML:Title" /></title>
> </head>
> <body>
> <xsl:apply-templates select="*[not(self::JavaXML:Title)]" />
> </body>
> </html>
> </xsl:template>
>
> </xsl:stylesheet>
> ----------------------------------------
>
> The point to note is that there are three namespace declarations in the
> xsl:stylesheet element in the input file but only one after the same file has
> been run through either SAXBuilder or DOMBuilder. This is clearly bad. I've
> been looking through the jdom source tree and suspect that the problem may be
> with Xerces (by the way, in case you weren't reading carefully, i am using the
> Apache Xerces parser in this example).
>
> Could someone who understands this more than i please comment on this issue. If
> this is a bug wit Xerces i'll take it up with them, but some informed discussion
> would be nice at this point.
>
> The input file looks exactly like the first output segment. Here is the source
> of the program that generated the above output:
>
> import org.jdom.input.SAXBuilder;
> import org.jdom.input.DOMBuilder;
> import org.jdom.output.XMLOutputter;
>
> import java.io.File;
> import java.io.InputStream;
> import java.io.OutputStream;
> import java.io.FileInputStream;
>
> public class BugDemo
> extends Object
> {
> public static void main(String[] args)
> throws Exception
> {
> if (args.length == 1)
> {
> File file = new File(args[0]);
> new BugDemo().demoBug(file);
> }
> else
> {
> System.out.println("useage: java BugDemo <XMLFileName>");
> }
> }
>
> public void demoBug(File file)
> throws Exception
> {
> System.out.println("\n----------------------------------------\n");
> System.out.println("here's an XML file:");
> System.out.println("\n----------------------------------------\n");
> copyStream(new FileInputStream(file), System.out);
> System.out.println("\n----------------------------------------\n");
> System.out.println("here's the same file after the SAXBuilder has its way with
> it:");
> System.out.println("\n----------------------------------------\n");
> new XMLOutputter().output(new SAXBuilder().build(file), System.out);
> System.out.println("\n----------------------------------------\n");
> System.out.println("here's the same file after the DOMBuilder has its way with
> it:");
> System.out.println("\n----------------------------------------\n");
> new XMLOutputter().output(new DOMBuilder().build(file), System.out);
> System.out.println("\n----------------------------------------\n");
> }
>
> private void copyStream(InputStream in, OutputStream out)
> throws Exception
> {
> byte[] buffer = new byte[256];
> while (true)
> {
> int bytes = in.read(buffer);
> if (bytes == -1) break;
> out.write(buffer, 0, bytes);
> }
> }
>
> }
>
>
> ------------
>
> - The happiest of people aren't the ones
> who always have the best of everything;
> they are the ones who always make the best
> of everything they have.
>
> Ed Morehouse
> Software Engineer/Evil Genius
> The Motley Fool
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com
--
Brett McLaughlin, Enhydra Strategist
Lutris Technologies, Inc.
1200 Pacific Avenue, Suite 300
Santa Cruz, CA 95060 USA
http://www.lutris.com
http://www.enhydra.org
More information about the jdom-interest
mailing list