James

Brilliant! Thanks very much.

Be good to have an example - why not this one - in the FAQ

Cheers

Tony
----- Original Message -----
From: "James Strachan" <[EMAIL PROTECTED]>
To: "Tony Ms" <[EMAIL PROTECTED]>;
<[EMAIL PROTECTED]>
Sent: Wednesday, October 23, 2002 10:09 AM
Subject: Re: [dom4j-user] re: Can I use XPath expression as prepared
statements?


> Tony,
>
> You're code is fine but for 1 line. You're creating the XPath properly,
> setting variables in the context, then not using the XPath object
directly.
> See below...
>
>
> From: "Tony Ms" <[EMAIL PROTECTED]>
> > Back in May, James Strachan answered a query with this:
> >
> > Yes its very possible indeed. The trick is to use XPath variables. e.g.
> >
> >  import org.jaxen.SimpleVariableContext;
> >
> >  SimpleVariableContext variables = new SimpleVariableContext();
> >  XPath xpath = doc.createXPath( "//foo[@doo=$x]" );
> >  xpath.setVariableContext( variables );
> >
> >  Then you can set whatever variable value you want for 'x' and apply the
> >  XPath to any node.
> >
> >  variables.setVariableValue( "x", "abc" );
> >  List answer = xpath.selectNodes( document );
> >  List answer = xpath.selectNodes( someNode );
> >
> >  I've been trying to get this to go, and having a problem. Here is my
> > program:
> >
> > import java.io.*;
> > import java.util.*;
> > import org.dom4j.*;
> > import org.dom4j.io.*;
> > import org.dom4j.xpath.*;
> > import org.jaxen.SimpleVariableContext;
> >
> > public class XPathTest {
> > static String s1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
> > static String s2 = "<StateTable>";
> > static String s3 = "<Action>";
> > static String s4 = "<InputEvent>Cash</InputEvent>";
> > static String s5 = "<ProcessFile>Cash.xsl</ProcessFile>";
> > static String s6 = "</Action>";
> > static String s7 = "</StateTable>";
> >
> > public static void main(String[] args){
> > (new XPathTest()).go(s1+s2+s3+s4+s5+s6+s7,
> > "/StateTable/Action[InputEvent=\"Cash\"]/ProcessFile",
> > "n/a");
> > (new XPathTest()).go(s1+s2+s3+s4+s5+s6+s7,
> > "/StateTable/Action[InputEvent=$x]/ProcessFile",
> > "Cash");
> > }
> >
> > void go(String theXML, String expr, String para){
> > try
> > {
> > SAXReader reader = new SAXReader(false);
> > Document doc = reader.read(new StringReader(theXML));
> > XPath xp = doc.createXPath(expr);
> > SimpleVariableContext vc = new SimpleVariableContext();
> > xp.setVariableContext(vc);
> > vc.setVariableValue("x", para);
> > System.out.println(doc.valueOf(xp.getText()));
>
> Change this like to...
>
> System.out.println(xp.valueOf(doc));
>
> Then you will actually use the XPath object with its variable context. The
> line you had just takes the XPath String, ignores the variable context and
> evaluates the XPath expression in an empty variable context.
>
> James
> -------
> http://radio.weblogs.com/0112098/
>
> __________________________________________________
> Do You Yahoo!?
> Everything you'll ever need on one web page
> from News and Sport to Email and Music Charts
> http://uk.my.yahoo.com

__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com


-------------------------------------------------------
This sf.net email is sponsored by: Influence the future 
of Java(TM) technology. Join the Java Community 
Process(SM) (JCP(SM)) program now. 
http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0002en

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

Reply via email to