Hi, Erik:

  Thank you for your answer.

  However, I still have some trouble to make it work.

  My major trouble is how can I get the correct XercesDocumentWrapper 
constructed ?  The XercesDocumentWrapper takes a DomDocument as the first 
parameter, I get the DomDocument in the following way (I do not know if this is 
correct). 

  XalanDOMString *  theFileName = new XalanDOMString (yourFilePath.c_str()); 
  LocalFileInputSource * myTmpInputSource = new LocalFileInputSource 
((*theFileName).c_str());

  XercesParserLiaison::DOMParserType      theParser;
  theParser.parse( *myTmpInputSource);
  DOMDocument * XercesDocument = theParser.getDocument();  //Here is the way to 
get the DOMDocument, is this O.K ? 
  XercesDocumentWrapper theWrapper (XercesDocument);  


  //After I got XalanNode * theNode using some other way (using 
theEavluate.selectSingleNode and slectNodeList).  I called the following 
function
  // 
  DOMNode * xercesNode = (DOMNode* ) theWrapper.mapNode (theNode);

  But as soon as the above sentence called, it goes to the catch exception 
block.  I am not sure what's going wrong.

  By the way, do you have any code sample to show the answer you shown me in 
your last E-mail ?  It will be very helpful 
  I can see the code sample.

  Thanks a lot for your help.


Sincerely

Richard Liu
Software Engineer at Boeing







-----Original Message-----
From: Erik Rydgren [mailto:[EMAIL PROTECTED]
Sent: Monday, March 01, 2004 10:12 AM
To: [email protected]
Subject: RE: Do we have any way to update or change the value of of a
DOMTREE in the memory using xpath and Xalan libiary ? 


Xalan can do it. You simply select the nodes you are interested in with
XPath and loop over the result while applying your changes.

(Warning: The following code is written on top of my head and may
contain errors or cause confusion)

For instance assume that you have this document in memory:

<doc>
  <wanteditem attr="value1"/>
  <notwanteditem attr="somevalue"/>
  <wanteditem attr="value2"/>
</doc>

Then assume that you want to change all /doc/wanteditem/@attr value to
foobar.

- First select your nodes with Xalan XPath using a XercesDocumentWrapper
and XPath evaluator. (xpath: /doc/wanteditem/@attr)
You will get a XObject that is a nodeset of 2 attribute nodes.
- Extract the nodeset object from the XObject. (Method on the XObject)
- Loop through the nodeset getting XalanNode pointers.
- The Xalan nodes are read only so you need to map the XalanNodes to
XercesNodes. This is done with the XercesDocumentWrapper::map method.
- You will then have the node that corresponds to the attr. Do a
setNodeValue to "foobar".
- Repeat for each node in the nodeset and you are done.

Remember to rebuild the XercesDocumentWrapper between changes in the
document.

/ Erik

> -----Original Message-----
> From: Liu, Richard [mailto:[EMAIL PROTECTED]
> Sent: den 1 mars 2004 15:54
> To: [email protected]
> Subject: Do we have any way to update or change the value of of a
DOMTREE
> in the memory using xpath and Xalan libiary ?
> 
> Hi,
> 
>   I have a general question in terms of xpath ability.
> 
>   I know we can extract (get) the specific value of a node using xPath
> query.
> 
>   However, our application needs to have the ability to change or
update
> the value of certain nodes, I have no idea if we can do it?
>   If using xPath and Xalan library can not do it, do we have any other
> tools that may support this ability ?
> 
> 
> Thanks
> 
> Richard Liu
> Software Engineer at Boeing
> 
> 

Reply via email to