import java.io.File; import java.io.FileInputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.namespace.NamespaceContext; import org.jaxen.JaxenException; import org.jaxen.dom.DOMXPath; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class JaxenXPCheck { public static void main(String[] args) throws Exception { (new JaxenXPCheck()).go(args); } private void go(String[] args) throws Exception { HashMap map = new HashMap(); // Add all namespace declarations here... map.put("geo", "http://www.w3.org/2003/01/geo/wgs84_pos#"); System.out.println(); if ((args == null) || (args.length == 0)) { runJaxen("//geo:lat[(text() >= 37.75)]", map); runJaxen("//geo:lat[(number(text()) >= 37.75)]", map); } else { for (String xp : args) { runJaxen(xp, map); } } } private void runJaxen(String xpExpr, Map map) throws Exception { DummyNamespaceContext nsContext = new DummyNamespaceContext(map); // Set file name here. File file = new File("geodata.xml"); // Get Document Builder Factory DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); factory.setIgnoringElementContentWhitespace(true); // Obtain a document builder object DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(file); org.jaxen.XPath xpObj = new DOMXPath(xpExpr); for (String key : nsContext.nsMappings.keySet()) { xpObj.addNamespace(key, nsContext.nsMappings.get(key)); } runXPath(doc, xpObj, xpExpr); } public static void runXPath(Document doc, org.jaxen.XPath xpath, String expr) throws Exception { List result = xpath.selectNodes(doc); System.out.println("Expr: " + expr + "\n"); if (result == null) { System.out.println(" -=-> Found ZERO results."); } else { System.out.println(" -=-> Found list w/ " + result.size() + " matching nodes."); } System.out.println(); } private class DummyNamespaceContext implements NamespaceContext { private final Map nsMappings; public DummyNamespaceContext(Map ns) { this.nsMappings = ns; } public String getNamespaceURI(String prefix) { return nsMappings.get(prefix); } public String getPrefix(String nsURI) { for (Map.Entry entry : nsMappings.entrySet()) { if (entry.getValue().equals(nsURI)) { return entry.getKey(); } } return null; } public Iterator getPrefixes(String nsURI) { ArrayList prefixes = new ArrayList(); for (Map.Entry entry : nsMappings.entrySet()) { if (entry.getValue().equals(nsURI)) { prefixes.add(entry.getKey()); } } return prefixes.iterator(); } } }