And, just to reveal all of my puzzle: the source const char * const xml array 
contains known-to-be-valid, well-formed XML which begins 
"<casperAPI><trigger>..." and so that first XPath query should return a match 
at <trigger>.

On Thursday 16 June 2005 08:17 am, Lonnie VanZandt wrote:
> Oh, there's an intervening method which resolves the context node from a
> XalanDOMString expression. That is:
>
>     //! evaluate an XPath expression for a given XalanDOM and a given
> starting context
>     void evaluateQuery( XalanDocument * const pXalanDoc,
>       XalanDOMString xdsContext,
>       XalanDOMString xdsPathExpr,
>       NodeRefList& theResult,
>       bool * const pbFound )
>     {
>       *pbFound = false;
>
>       if ( (XalanDocument *) NULL != pXalanDoc )
>       {
>         // attempt to locate the requested context node
>         XalanNode* const theContextNode =
> pMyXPathEvaluator->selectSingleNode( *pMyXalanSourceTreeDOMSupport,
> pXalanDoc,
>                                               xdsContext.c_str(),
>
> pXalanDoc->getDocumentElement() );
>
>         evaluateQuery( pXalanDoc,
>           theContextNode, xdsContext, theResult, pbFound );
>       }
>     }
>
> and, of course, one more to go from const char*'s to XalanDOMString's (but
> that is just a one line wrapper which hides the XalanDOMString(const char *
> const).c_str() junk from the "client".
>
> On Thursday 16 June 2005 08:08 am, Lonnie VanZandt wrote:
> > The method which calls selectNodeList (and wherein selectNodeList dies):
> >
> >     //! evaluate an XPath expression for a given XalanDOM and a given
> > starting context
> >     void evaluateQuery( XalanDocument * const pXalanDoc,
> >       XalanNode * const theContextNode,
> >       XalanDOMString xdsPathExpr,
> >       NodeRefList& theResult,
> >       bool * const pbFound )
> >     {
> >       *pbFound = false;
> >
> >       if ( (XalanDocument * const) NULL != pXalanDoc )
> >       {
> >         // a null node indicates that the context couldn't be found
> >         if ( (XalanNode * const) NULL != theContextNode)
> >         {
> >           // OK, let's evaluate the expression...
> >           pMyXPathEvaluator->selectNodeList(
> >                                 theResult,
> >                                 *pMyXalanSourceTreeDOMSupport,
> >                                 theContextNode,
> >                                 xdsPathExpr.c_str(),
> >                                 pXalanDoc->getDocumentElement() );
> >
> >           * pbFound = ( !theResult.empty() );
> >         }
> >       }
> >     }
> >
> > The calling method (in a derived class which contains the above method):
> >
> >     NodeRefList nodeRefList;
> >     bool bFound = false;
> >     pDBDXMLProcessor->evaluateQuery( pRequestXalanDoc,
> >       "/casperAPI", "trigger", nodeRefList, &bFound );
> >
> > The context initialization in the base class' constructor:
> >
> >       try
> >       {
> >         XMLPlatformUtils::Initialize();
> >
> >         // Initialize Xalan.
> >         XalanTransformer::initialize();
> >
> >         // initialize the XalanSourceTree
> >         pMyXalanSourceTreeInit = new XalanSourceTreeInit();
> >
> >         // We'll use these to parse the XML file.
> >         pMyXalanSourceTreeDOMSupport = new XalanSourceTreeDOMSupport();
> >         pMyXalanSourceTreeParserLiaison = new
> > XalanSourceTreeParserLiaison( *pMyXalanSourceTreeDOMSupport );
> >
> >         // Hook the two DOM manager and the Xalan parser together
> >
> > pMyXalanSourceTreeDOMSupport->setParserLiaison(
> > pMyXalanSourceTreeParserLiaison );
> >
> >         // our XPathEvaluator
> >         XPathEvaluator::initialize();
> >         pMyXPathEvaluator = new XPathEvaluator();
> >
> >         // instantiate an Xalan Transformer
> >         pMyXalanTransformer = new XalanTransformer();
> >       }
> >       catch (const XMLException& toCatch)
> >       {
> >          std::cerr << "Xalan and Xerces initialization failed. Error code
> > was "
> >                     << toCatch.getCode() << "." << std::endl;
> >
> >          //throw toCatch;
> >       }
> >
> > And, finally, parsing of pRequestXalanDoc:
> >
> >     //! parse the given XML input into a read-only Xalan DOM Document
> >     XalanDocument * const parseString( const char * const
> > sXmlInputCharArray ) const
> >     {
> >       // wrap the input string within a stream handler
> >       std::istringstream issXml( sXmlInputCharArray );
> >
> >       // promote the input XML character buffer into an XSLTInputSource
> >       const XSLTInputSource xisXml( issXml );
> >
> >       XalanDocument * const pXalanDoc =
> > pMyXalanSourceTreeParserLiaison->parseXMLStream( xisXml );
> >
> >       return pXalanDoc;
> >     }
> >
> > On Thursday 16 June 2005 07:59 am, Axel Weiß wrote:
> > > Lonnie VanZandt wrote:
> > > > Not quite, the crash still occurs in the same location - but
> > > > assuredly it is a good idea to call that initialize() method
> > > > nevertheless.
> > >
> > > Hi Lonnie,
> > >
> > > would you, please, provide us with some example you're working on?
> > >
> > > Just to be in-line with what you're telling about...
> > >
> > > Cheers,
> > >                   Axel
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to