Hello,

I don't know if you guys remember or not, but a while back I was looking 
into making a "mutable navigator" interface that could be used in order to 
write code that was independent of object model. I've finally got around to 
working on this, with a fair degree of success so far I think, but I'm 
stuck with at least one problem that I would like to ask about. This is, is 
there any existing library (or even just an accepted algorithm) documented 
somewhere, that allows nodes to be created based on an xpath?

Here is one example. If I have the following document:

<properties xmlns="urn:myPropsSchema">
         <project name="alpha">
                 <frame id="001"/>
         </project>
         <project name="bravo">
         </project>
         <project name="charlie">
         </project>
<properties>

Then, I would like for this following xpath:

(with 'p' mapped to "urn:myPropsSchema")
/p:properties/p:project[@name='bravo']/p:frame[@id='001']/@bounds

to add and return the new node (the bounds attribute) like this:

<properties xmlns="urn:myPropsSchema">
         <project name="alpha">
                 <frame id="001"/>
         </project>
         <project name="bravo">
                 <frame id="001" bounds=""/>   <--- bounds attribute node 
returned
         </project>
         <project name="charlie">
         </project>
<properties>

So far I've got what I *think* is a reasonable (though likely not optimal) 
algorithm that repeatedly pulls off the last component (using '/' as a 
delimiter of course) and repeats the evaluation, until it finds at least 
one matching node. So in this case, it would be:

try 1:    /p:properties/p:project[@name='bravo']/p:frame[@id='001']/@bounds 
- nope
try 2:    /p:properties/p:project[@name='bravo']/p:frame[@id='001'] - nope
try 3:    /p:properties/p:project[@name='bravo'] - yep!

Found a hit on try 3. Then I take the remainder (in this case 
p:frame[@id='001']/@bounds) and begin adding the nodes relative to the 
match we found, additionally adding any qualification as necessary along 
the way (for example, we add the id attribute with a value of '001' to the 
frame element that we add to the bravo project).

So. My question is: is this a decent algorithm? I'm not quite as concerned 
about performance as I am about robustness across the range of potential 
xpaths that could be encountered. The primary use at this point is targeted 
towards generating a reasonably small number of requests from a graphical 
application - in the order of perhaps dozens at a time - not hundreds or 
thousands in a transform server or anything (at least not yet! :).

The question is how to reasonably handle all of the weird and ambiguous 
cases that can be described in an xpath? For example, //*[@name='Jim'] - 
what the heck do you do with that?

Anyway thanks for any advice, or pointers to existing implementations of 
this kind of functionality.

Jim


--
[EMAIL PROTECTED]

Visit www.jbrix.org for:
   + SpeedJAVA jEdit Code Completion Plugin
   + Xybrix XML Application Framework
   + other great Open Source Software


_______________________________________________________________

Don't miss the 2002 Sprint PCS Application Developer's Conference
August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm

_______________________________________________
dom4j-dev mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dom4j-dev

Reply via email to