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