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 //[EMAIL PROTECTED] = 'id1'] on a Xalan 
> >document, and got the desired value.
> >
> >However, I am facing one issue with the expressions //[EMAIL PROTECTED] = 
> >'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 //[EMAIL PROTECTED] = '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:
> > >
> > >//[EMAIL PROTECTED] = '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

Reply via email to