[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xalan-j-users
Subject:    RE: Is this a XALAN document identification bug?
From:       Larry Trammell <larryt () mstarlabs ! com>
Date:       2007-04-17 23:33:41
Message-ID: 22A20AD271DB4949836F85AACBB90A7708925A () mailserver ! mstarlabs ! com
[Download RAW message or body]

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@mstarlabs.com]
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.
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic