Is this a XALAN document identification bug? 2007-04-17 - By Larry Trammell
Both David Bertoni and Werner Koch pointed me in the right direction, but in different ways. For the benefit of other newbies like me who have only worked with XSLT for two days, and have not quite mastered the full technical vocabulary of W3C: this is a solution to the problem. (No, it is not a XALAN bug!)
1. Add an additional namespace attribute to the XSLT stylesheet node declaring the namespace used in the XHTML data. Give it an arbitrary convenient name. The assigned name doesn't have to match the one used in the xml input text, but the strings must match. For my example: <xsl:stylesheet xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
2. Now in the XSLT stylesheet, prefix the elements referenced in the input data to identify their namespace. For example, in the original stylesheet template:
<xsl:template match="html"> <html> <xsl:apply-templates /> </html> </xsl:template>
this becomes:
<xsl:template match="xhtml:html"> <html> <xsl:apply-templates /> </html> </xsl:template> Thanks to both responders.
-----Original Message----- From: Larry Trammell [mailto:larryt@(protected)] Sent: Tuesday, April 17, 2007 1:13 PM To: 'Xalan J Users List' Subject: Is this a XALAN document identification bug?
Hi from a list and XALAN newbie seeking the advice of world class GURU - experienced and knowledgeable XALAN expert - competent XALAN user - anybody with a clue - about whether the behavior described below is a user error / known feature / bug that should be reported to the XALAN staff.
This problem was observed on a new installation of version 2.7.0, running on Windows 2000 with JRE 1.5.0_06.
This is a simple xml test document (XHTML, but WITHOUT proper document identification tags):
<?xml version="1.0"?> <html> <head> <title>Main title</title> </head> <body> <p> Example text <em>highlighted.</em> </p> </body> </html>
Reference XSLT test case: drop 'head' section and deep-copy 'body' section. Nothing magical here.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="html"> <html> <xsl:apply-templates /> </html> </xsl:template> <xsl:template match="head"> <xsl:comment> Ignore head section. </xsl:comment> </xsl:template> <xsl:template match="body"> <xsl:copy-of select="." /> </xsl:template> </xsl:stylesheet>
The reference case produces correct and expected results.
<html> <!-- Ignore head section. --> <body> <p> Example text <em>highlighted.</em> </p> </body> </html>
Now repeat using the same XML document except WITH valid document identification tags.
<?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> ...
or
<?xml version="1.0"?> <html xmlns="http://www.w3.org/1999/xhtml"> ...
For these: incorrect processing. Default rule is applied, producing the following incorrect results.
<?xml version="1.0" encoding="UTF-8"?> Main title Example text highlighted.
Any advice? I could always run an AWK pre-processing step and strip out the document identification lines manually, but this seems inelegant.
|
|