thank you

-----Original Message-----
From: [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: 8/24/2001 11:05 AM
Subject: Re: can't use DOM Input on xalan 1.2 c++


Hi Gus,

This question has been asked several times over the last couple of days.
In 1.2, XalanTransformer does not accept DOM as input.

The usage pattern does not show any code involving XalanTransformer from
what I can see, although we can certainly make this more explicit the
next
time we update the documentation.

We may try to get DOM input working with XalanTransformer, but we're
also
trying to move away from supporting the Xerces DOM since it's so
difficult
to do.  For the time being, you'll need to use the older APIs to
transform
DOM.

Dave



 

                      Gus Tenrreiro

                      <[EMAIL PROTECTED]         To:
"'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]>               
                      >                        cc:      (bcc: David N
Bertoni/CAM/Lotus)                                      
                                               Subject: can't use DOM
Input on xalan 1.2 c++                                  
                      08/24/2001 01:42

                      PM

                      Please respond

                      to xalan-dev

 

 




Hi,

   I modified the XalanTransform sample app that comes with the
distribution
of xalan 1.2 c++ in order to accept a DOM Document as input just as it's
explained on the basic usage patterns section on the xalan website, but
it
doesn't work, I get the error:

An exception occured! Type:RuntimeException, Message:The primary
document
entity could not be opened. Id={null}


here is the source:

#include <util/PlatformUtils.hpp>
#include <parsers/DOMParser.hpp>
#include <dom/DOM_Node.hpp>
#include <Include/PlatformDefinitions.hpp>
#include <util/PlatformUtils.hpp>
#include <XalanTransformer/XalanTransformer.hpp>
#include <XercesParserLiaison/XercesDOMSupport.hpp>
#include <XercesParserLiaison/XercesParserLiaison.hpp>
#include <XalanDOM/XalanDocument.hpp>
//#include <XalanTransformer/XalanTransformer.hpp>



#if defined(XALAN_OLD_STREAM_HEADERS)
#include <iostream.h>
#include <strstream.h>
#else
#include <iostream>
#include <strstream>
#endif



int
main(
                                     int
        argc,
                                     const char*
argv[])
{
#if !defined(XALAN_NO_NAMESPACES)
             using std::ostrstream;
             using std::cout;
             using std::cerr;
    using std::endl;
#endif

    if (argc < 3 || argc > 4)
             {
                         cerr << "Usage: XalanTransform XMLFileName
XSLFileName
[OutFileName]" << endl;
                         return -1;
             }

             // Call the static initializer for Xerces.
             XMLPlatformUtils::Initialize();

    // Initialize Xalan.
    XalanTransformer::initialize();

             DOMParser  theParser;
// You MUST instruct the Xerces DOMParser NOT to create a DOM_XMLDecNode
// in the DOM to represent the XML declaration. See "Limitations" below.
theParser.setToCreateXMLDeclTypeNode(false);
theParser.parse("foo.xml");
const DOM_Document theDOM = theParser.getDocument();

// Set up a XercesParserLiaison and use it to wrap the DOM_Document
// in a XalanDocument.
XercesDOMSupport   theDOMSupport;
XercesParserLiaison            theParserLiaison(theDOMSupport);
XalanDocument* theDoc = theParserLiaison.createDocument(theDOM);

// Use the XalanDocument to create an XSLTInputSource object, which
// you can then use in a transformation.
XSLTInputSource                      theInputSource(theDoc);

    // Create a XalanTransformer.
             XalanTransformer theXalanTransformer;

    int                                                theResult = 0;

    if (argc == 4)
             {
        // Do the transform.
        theResult = theXalanTransformer.transform(argv[1], argv[2],
argv[3]);

        if(theResult != 0)
                 {
                             cerr << "XalanError: \n" <<
theXalanTransformer.getLastError();
                 }
    }
    else
    {
        // Do the transform.
        theResult = theXalanTransformer.transform(theInputSource,
argv[2],
cout);

        if(theResult != 0)
                 {
                             cerr << "XalanError: \n" <<
theXalanTransformer.getLastError();
                 }
    }

    // Terminate Xalan.
             XalanTransformer::terminate();

             // Call the static terminator for Xerces.
             XMLPlatformUtils::Terminate();

             return theResult;
}



I hardcoded foo.xml as the xml file to be parsed and I use foo.xsl as
the
stylesheet.

foo.xml

<?xml version="1.0"?>
<vxml>
 this is a test
</vxml>



foo.xsl

<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">
  <xsl:output doctype-public="-//Nuance/DTD VoiceXML 1.0b//EN"
 
doctype-system="http://www.nuance.com/????/nvxml0_9_3.dtd"/>

  <xsl:template match="vxml">
     <vx> this really is a test </vx>
  </xsl:template>

</xsl:stylesheet>



Reply via email to