This is a FAQ:

   http://xml.apache.org/xalan-j/faq.html#faq-11

Xalan is working correctly.  Why TurboXML is working is a mystery to me.
Are you sure it's using Xalan?

Dave



                                                                                
                                         
                      Jason Winshell                                            
                                         
                      <[EMAIL PROTECTED]         To:      [EMAIL PROTECTED]     
                                
                      iver.com>                cc:      (bcc: David N 
Bertoni/CAM/Lotus)                                 
                                               Subject: external default ns 
problem                                      
                      01/07/2002 08:20                                          
                                         
                      AM                                                        
                                         
                                                                                
                                         
                                                                                
                                         



Hi folks,

I having a problem getting Xalan to match input which explicitly is
governed by a schema defined to be the default namespace.

test.xsd:
--------

<?xml version='1.0' encoding='UTF-8'?>
<xsd:schema

   xmlns:xsd="http://www.w3.org/2001/XMLSchema";
   xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance";

   targetNamespace="http://junk.com/Test";
>
<xsd:element name="test">
   <xsd:complexType>
     <xsd:sequence minOccurs="1" maxOccurs="unbounded">
       <xsd:element name="this" type="xsd:string"/>
     </xsd:sequence>
   </xsd:complexType>
</xsd:element>
</xsd:schema>

input.xml
---------

<?xml version='1.0' encoding='UTF-8' standalone="no" ?>
<test
   xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance";

   xmlns= "http://junk.com/Test";
   xsi:schemaLocation="http://junk.com/Test test.xsd"
>
   <this>
     thisdata
   </this>
</test>

XSL:

transform.xsl
-------------
<?xml version='1.0' encoding='UTF-8' standalone="no" ?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
   xmlns:xsd="http://www.w3.org/2001/XMLSchema";
>
   <xsl:output method = "xml" indent = "yes" />


   <!-- the root element is schema -->
   <xsl:template match="/">
     ## root was matched
     count this: <xsl:value-of select="count(//this)"/>
     <xsl:apply-templates select="*"/>
   </xsl:template>

   <xsl:template match="this" >
     elem name=<xsl:value-of select="name()"/>
     ## this was matched
     <xsl:apply-templates/>
   </xsl:template>
</xsl:stylesheet>

I've tried Xalan 1.2.2, 2.1.0, and 2.2.D14 all which produce
this result which does not match elements in the default
name space.
---------
<?xml version="1.0" encoding="UTF-8"?>
## root was matched
count this: 0

thisdata
------

The <this> element goes unmatched.

By replacing the use of:
   xmlns= "http://junk.com/Test";
   xsi:schemaLocation="http://junk.com/Test test.xsd"
With:
   xsi:noNamespaceLocation="test.xsd"

Things work as expected, producing the desired result:

<?xml version="1.0" encoding="UTF-8"?>

## root was matched
count this: 1

elem name=this
## this was matched

thisdata

Interestingly if I Turbo XML on this same input.xml
(which uses Xalan for XSLT) I get the correct result.

The problem goes away if input.xml uses a non-default namespace for
all the elements to be matched (with associated namespace changes in
transform)

input.xml:

<?xml version='1.0' encoding='UTF-8' standalone="no" ?>
<foo:test
   xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance";

   xmlns:foo= "http://junk.com/Test";
   xsi:schemaLocation="http://junk.com/Test test.xsd"
>
   <foo:this>
     thisdata
   </foo:this>
</foo:test>

transform.xsl

<?xml version='1.0' encoding='UTF-8' standalone="no" ?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
   xmlns:xsd="http://www.w3.org/2001/XMLSchema";

   xmlns:foo="http://junk.com/Test";

>
   <xsl:output method = "xml" indent = "yes" />


   <!-- the root element is schema -->
   <xsl:template match="/">
     ## root was matched
     count this: <xsl:value-of select="count(//foo:this)"/>
     <xsl:apply-templates select="*"/>
   </xsl:template>

   <xsl:template match="foo:this" >
     elem name=<xsl:value-of select="name()"/>
     ## this was matched
     <xsl:apply-templates/>
   </xsl:template>
</xsl:stylesheet>


Why is Xalan not matching elements when the input document has a
default namespace that is explicitly declared (as opposed to using
noNameSpaceLocation)?

--
-------------------------------------------------------------------------
Jason Winshell, Principal Consulting Engineer     [EMAIL PROTECTED]
Bear River Associates, Inc.                      http://www.bearriver.com




Reply via email to