Tony, My guess is the DocumentHelper.createXPath method, and how it uses the org.jaxen.SimpleVariableContext. I was assuming the createXPath method would "convert" the XPath string with the variable context's replaced, but that doesn't seem to be it. That is where I plan on starting - when I get back to it. I've put it aside and have just used a StringBuffer to create my XPath String instead. Little more cumbersome, but I know that IT works!
good luck steve Tony Ms wrote: > Steve > > Thanks. > > Can you point me to the class that is meant to do the substitution, so that > I can put in some diags of my own? > > Cheers > > Tony > > ----- Original Message ----- > From: "Stephen C. Upton" <[EMAIL PROTECTED]> > To: "BtOW" <[EMAIL PROTECTED]> > Cc: <[EMAIL PROTECTED]> > Sent: Friday, October 18, 2002 1:50 PM > Subject: Re: [dom4j-user] re: Can I use XPath expression as prepared > statements? > > > Tony, > > > > Yea, I'm going to have to go back and hit the books (aka docs). I got this > to > > work for your example, but can't not get some of my stuff to work, which > is only > > a little more complicated, i.e., I use "and" as part of my selection > criteria. > > > > However, to answer your question, I'm using the dom4j-full.jar dated > 9/24/02 > > (one of the daily builds, as I was having problems with the XMLWriter on > another > > problem). I'm not sure what version of jaxen it's using (when I unpack the > jar, > > it appears the dates on the jaxen classes are 4/26/02) > > > > good luck > > steve > > > > BtOW wrote: > > > > > Steve, thanks for your prompt response. I can see the quotes make better > > > sense. However, it still won't work on my machine - it's failing to do > the > > > substitution. I'd expect getText() to return the string with the > > > substitution in place already. > > > > > > To illustrate, I've changed the System.out.println()s to: > > > > > > System.out.println("A " + xp.getText()); > > > System.out.println("B " + doc.valueOf(xp.getText())); > > > > > > The output I get is: > > > > > > A /StateTable/Action[InputEvent="Cash"]/ProcessFile > > > B Cash.xsl > > > A /StateTable/Action[InputEvent="$x"]/ProcessFile > > > B > > > > > > Maybe I'm using a different version. I have jaxen-1.0-FCS and > > > dom4j-patched-1.3 > > > > > > Cheers > > > > > > Tony > > > > > > > Tony, > > > > > > > > There was an error in James example. Replace your line with this: > > > > "/StateTable/Action[InputEvent=\"$x\"]/ProcessFile", > > > > > > > > with the escaped quotes around the variable, and it works fine. I get > > > > "Cash.xsl" as the output. > > > > > > > > steve > > > > > > > > Tony Ms wrote: > > > > > > > > > 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())); > > > > > } > > > > > catch (Exception e) > > > > > { > > > > > e.printStackTrace(System.out); > > > > > } > > > > > } > > > > > } > > > > > > > > > > The first call to go(), not using a variable, works fine. The second > > > bombs > > > > > with: > > > > > > > > > > org.dom4j.XPathException: Exception occurred evaluting XPath: > > > > > /StateTable/Action > > > > > [InputEvent=$x]/ProcessFile. Exception: Variable {null}:x > > > > > > > > > > I'd much appreciate some assistance in finding out what's wrong. > > > > > > > > > > Cheers > > > > > > > > > > Tony > > > > > > > > dom4j-user mailing list > > > > > [EMAIL PROTECTED] > > > > > https://lists.sourceforge.net/lists/listinfo/dom4j-user > > > > > > > > > > > > > > ------------------------------------------------------- > > This sf.net email is sponsored by:ThinkGeek > > Welcome to geek heaven. > > http://thinkgeek.com/sf > > _______________________________________________ > > dom4j-user mailing list > > [EMAIL PROTECTED] > > https://lists.sourceforge.net/lists/listinfo/dom4j-user > > __________________________________________________ > 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 emial is sponsored by: Influence the future > of Java(TM) technology. Join the Java Community > Process(SM) (JCP(SM)) program now. > http://ad.doubleclick.net/clk;4699841;7576298;k?http://www.sun.com/javavote > _______________________________________________ > dom4j-user mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/dom4j-user ------------------------------------------------------- This sf.net emial is sponsored by: Influence the future of Java(TM) technology. Join the Java Community Process(SM) (JCP(SM)) program now. http://ad.doubleclick.net/clk;4699841;7576298;k?http://www.sun.com/javavote _______________________________________________ dom4j-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dom4j-user