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 > > __________________________________________________ > 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: viaVerio will pay you up to > $1,000 for every account that you consolidate with us. > http://ad.doubleclick.net/clk;4749864;7604308;v? > http://www.viaverio.com/consolidator/osdn.cfm > _______________________________________________ > dom4j-user mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/dom4j-user ------------------------------------------------------- This sf.net email is sponsored by: viaVerio will pay you up to $1,000 for every account that you consolidate with us. http://ad.doubleclick.net/clk;4749864;7604308;v? http://www.viaverio.com/consolidator/osdn.cfm _______________________________________________ dom4j-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dom4j-user