The issue may be in the Xerces-C XMLReader when trying to construct a nodeset.
I have not tried such LAX parsing of XML documents with Xerces-C callbacks.

When namespace prefixes are used, indicating qualified names, the
namespaces must be specified.  This is part of wellformedness.  The
presence of prefixes without qualifying names will cause the nodeset
generators to fail during namespace resolution, resulting in an empty nodeset.

I have tried several methods trying to workaround your absence of
namespace qualified prefixes and failed.  If you must have this capability,
you may need to coerce your source into a nodeset by other means and
supply your own document tree walker. - Good Luck!

Maybe someone else can shed some light on how to set specific features
for XMLReaders to accomplish what you want.

- Steve

On 11/7/2011 5:39 PM, shath...@e-z.net wrote:
Hi,
I need to copy all the child elements from the parent element to output
xml using xalan c++  transform method. However, one of the child element
is prefixed but does not have corresponding namespace.
What should I do in xslt so that all the children elements of parent
element are copied to output xml file without caring the namespace. Altova
XMLSpy does that but When I use xalan c++ 1.10 , it does not copy. How I can achieve this using xalan c++ 1.10 ? E.g.
Input XML file
============
<?xml version="1.0" encoding="UTF-8"?>
<SwInt:Request>
                 <SwInt:RequestHeader>

<SwInt1:Requestor>cn=requestor,o=pimxbebb,o=swift1</SwInt1:Requestor>

<SwInt:Responder>cn=responder,o=pimxus33,o=swift</SwInt:Responder>
                         <SwInt:RequestRef>xyz</SwInt:RequestRef>
                 </SwInt:RequestHeader>
</SwInt:Request>
XSLT file
======
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    xmlns:Sw="urn:swift:snl:ns.Sw" xmlns:SwInt="urn:swift:snl:ns.SwInt"
xmlns:SwSec="urn:swift:snl:ns.SwSec">
         <xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes"/>
         <xsl:template match="/">
                 <xsl:copy-of select="/SwInt:Request/SwInt:RequestHeader"/>
         </xsl:template>
</xsl:stylesheet>
Output Xml comes with
<?xml version="1.0" encoding="UTF-8"?>
Regards
Ajay
All namespace prefixes in your XML file should be namespace qualified.

<?xml version="1.0" encoding="UTF-8"?>
<SwInt:Request  xmlns:SwInt="urn:swift:snl:ns.SwInt"
                 xmlns:SwInt1="urn:swift:snl:ns.SwInt1">
  <SwInt:RequestHeader>
   <SwInt1:Requestor>cn=requestor,o=pimxbebb,o=swift1</SwInt1:Requestor>
   <SwInt:Responder>cn=responder,o=pimxus33,o=swift</SwInt:Responder>
   <SwInt:RequestRef>xyz</SwInt:RequestRef>
  </SwInt:RequestHeader>
</SwInt:Request>

The following is an edit of your xslt file

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
     xmlns:SwInt="urn:swift:snl:ns.SwInt"
     xmlns:SwInt1="urn:swift:snl:ns.SwInt1">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
      omit-xml-declaration="yes"/>
  <xsl:template match="/">
      <xsl:copy-of select="/SwInt:Request/SwInt:RequestHeader"/>
  </xsl:template>
</xsl:stylesheet>

Producing the output file

<SwInt:RequestHeader xmlns:SwInt="urn:swift:snl:ns.SwInt"
xmlns:SwInt1="urn:swift:snl:ns.SwInt1">
   <SwInt1:Requestor>cn=requestor,o=pimxbebb,o=swift1</SwInt1:Requestor>
   <SwInt:Responder>cn=responder,o=pimxus33,o=swift</SwInt:Responder>
   <SwInt:RequestRef>xyz</SwInt:RequestRef>
  </SwInt:RequestHeader>

I am unclear on what you are actually trying to do:

You only need in the stylesheet the prefix declarations used in the
stylesheet.  The xml documents need namespace declarations for the
prefixes they use.

Steven J. Hathaway




Reply via email to