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