logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

Re: Re: Re: Re: Urgent help reqd.: msg#00051

Subject: Re: Re: Re: Re: Urgent help reqd.

Hi Dave,

I could solve the problem by setting certain features (like fgXercesSchema) on Xerces DOM Builder. 

Thanks,
Indrajit


On Fri, 16 Feb 2007 Indrajit  Bhattacharya wrote :
>Also, I have set setUseValidation on XercesParserLiaison to true.
>
>-Indrajit
>
>
>
>On Fri, 16 Feb 2007 Indrajit  Bhattacharya wrote :
> >Dave,
> >
> >Many thanks for your comments. It was very useful for me.
> >Now I could evaluate the _expression_ //*[@id = 'id1'] on a Xalan document, and got the desired value.
> >
> >However, I am facing one issue with the expressions //*[@id = 'ID1']
> >and id('ID1') in another case. These expressions I am applying on a Xerces document. (I parsed an XML using Xerces, converted the resultant xerces DOMDocument* to XalanDocument* using codes found in the archives, and applied the XPath evaluator). But these do not give me any value. Please note that the XML that was parsed with xerces, had one schema associated with it.
> >
> >In a nutshell, I'm able to run the expressions //*[@id = 'ID1']
> >and id('ID1') on a XalanDocument* (after parsing an XML file by Xalan)
> >with desired results, but not getting any values when run on a DOMDocument* (created by parsing an XML file using xerces).
> >
> >What needs to be done for the DOMDocument* case ? I need to do it as application stores data in xerces DOM.
> >
> >Regards,
> >-Indrajit
> >
> >
> >On Fri, 16 Feb 2007 David Bertoni wrote :
> > >Indrajit Bhattacharya wrote:
> > >>Dave,
> > >>
> > >>Now I'm doing the following (though its not working. pls. let me know how to proceed.):-
> > >>
> > >>The SimpleXPathAPI is evaluating by doing:
> > >>XalanNode* const    theContextNode =
> > >>                theEvaluator.selectSingleNode(
> > >>                theDOMSupport,
> > >>                theDocument,
> > >>                XalanDOMString(argv[2]).c_str(),
> > >>                thePrefixResolver);
> > >>const XObjectPtr    theResult(
> > >>                    theEvaluator.evaluate(
> > >>                    theDOMSupport,
> > >>                    theContextNode,
> > >>                    XalanDOMString(argv[3]).c_str(),
> > >>                    thePrefixResolver)); theResult->str() returns the string id('id1').
> > >>
> > >>I have added the following:
> > >>
> > >>string myStr;
> > >>xalanc::XalanVector<char> data1;
> > >>theResult->str().transcode(data1);
> > >>myStr.assign(data1.begin(), data1.end());
> > >>
> > >>const XObjectPtr    theResult1(
> > >>                theEvaluator.evaluate(
> > >>                theDOMSupport,
> > >>                theContextNode,
> > >>                XalanDOMString(myStr.c_str()).c_str(),
> > >>                thePrefixResolver));
> > >>Here I'm passing the context node evaluated before along with the XPath _expression_ got from the last evaluation. theResult1->str() is returning blank string here.
> > >
> > >It's probably because the id() function requires there be attributes of type ID, which only happens if you validate the source document with a DTD or schema that declares such attributes as type "ID."
> > >
> > >>
> > >>Could you please tell me the correct way to proceed ? It would be very much helpful if you could provide some code snippet as I want to learn Xalan programming fast.
> > >
> > >Unless you can validate your source documents, I suggest you write some code to pick out the ID value you're looking for, then use a simple XPath _expression_ to search for the element(s) you want.  For example, you could construct an XPath _expression_ like this:
> > >
> > >//*[@id = 'id1']
> > >
> > >You could then evaluate that _expression_ to find the element you're looking forward.  This is not nearly as efficient as the id() function, especially if your documents are large.
> > >
> > >Dave



<Prev in Thread] Current Thread [Next in Thread>