You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by Sriram Narayan <sr...@thbs.com> on 2001/06/21 11:01:25 UTC

defaulting updates to inserts using xpath

Hi
I am writing a utility that allows one to update portions of an xml document using xpath expressions. i.e. update(String xpathString , String newValue)

For example, lets say the document is:

<addressBook> 
      <address> 
           <firstName>John</firstName> 
           <surname>Smith</surname> 
           <email>smithj@world.org</email> 
           <tel type = "work">234-123-222</tel> 
      </address> 
 </addressBook> 

Suppose u wanted to changed John's surname to 'Taylor'. U would call a method in my utility class as:

  utilObj.update( "/addressBook/address[child::firstName[text()='John']]/surname"  , "Taylor" );

So far so good. But i want behaviour that defaults updates to inserts if the element is not found.
e.g. If i want to add a middleName for John, i want to be able to say:

  utilObj.update( "/addressBook/address[child::firstName[text()='John']]/middleName"  , "W" );

now xpath.execute(...) would return an empty list as 'middleName' is not present. At this point, I want to get a handle to the last node that was found , which would be the 'address' element in this case (so that i can add a child for address). How do I achieve this? i.e. how do I tell xpath to return the last node found while traversing the expression?

I tried NodeCallback but it never seems to get called.

thanks in anticipation
-sriram