2009-05-29 15 views
7

में सैक्सन Xpath इंजन यहाँ मेरी कोड है:का उपयोग जावा

public static void main(String[] args) { 

    // System.setProperty(
    // "javax.xml.xpath.XPathFactory", 
    // "net.sf.saxon.xpath.XPathFactoryImpl"); 

    String xml="<root><a>#BBB#</a><a>#CCC#</a><b><a>#DDD#</a></b></root>"; 
    try{ 
     JDocument dom = new JDocument(xml); 

     XPathFactory factory = net.sf.saxon.xpath.XPathFactoryImpl.newInstance(); 
     XPath xpath = factory.newXPath(); 
     XPathExpression expr = xpath.compile("//a[matches(.,'#...#')]"); 

     Object result = expr.evaluate(dom, XPathConstants.NODESET); 
     NodeList nodes = (NodeList) result; 
     Nodes sharped = new Nodes(nodes); 

     for (Node n:sharped){ 
      System.out.println(n.toString()); 
     } 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 

} 

और मैं इस मिल:

javax.xml.transform.TransformerException: Impossible to find the function : matches 
at org.apache.xpath.compiler.XPathParser.error(XPathParser.java:608) 
at org.apache.xpath.compiler.XPathParser.FunctionCall(XPathParser.java:1505) 
at org.apache.xpath.compiler.XPathParser.PrimaryExpr(XPathParser.java:1444) 
at org.apache.xpath.compiler.XPathParser.FilterExpr(XPathParser.java:1343) 
at org.apache.xpath.compiler.XPathParser.PathExpr(XPathParser.java:1276) 

जावा org.apache.xpath.compiler.XPathParser वर्ग उपयोग कर रहा है जब मैं स्पष्ट रूप से net.sf.saxon.xpath.XPathFactoryImpl के माध्यम से अपने कारखाने बनाई जिसका मतलब है।

(मुझे वास्तव में केवल मेरे xpaths में कुछ matches डालना होगा ... इसलिए यदि सैक्सन से जुड़े किसी भी समाधान को ज्ञात नहीं है, तो मेरी आवश्यकता पर विचार करें)।

मैं क्या गलत कर रहा हूं?

उत्तर

11
सैक्सन उदाहरण से

:

System.setProperty("javax.xml.xpath.XPathFactory:"+NamespaceConstant.OBJECT_MODEL_SAXON, "net.sf.saxon.xpath.XPathFactoryImpl"); 
XPathFactory xpf = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON); 

वर्क्स ठीक।

+0

यदि आप जार फ़ाइलों के बारे में उलझन में हैं, तो आपको इसे काम करने के लिए अपनी निर्भरताओं पर सैक्सन कोर और सैक्सन गुंबद जोड़ने की आवश्यकता है, या आपको क्लास कॉम के नोड्स के लिए ऑब्जेक्ट मॉडल कार्यान्वयन का पता नहीं लगाया जा सकता है। sun.org.apache.xerces.internal.dom.DeferredDocumentImpl "अपवाद – Arash

+0

मैं विपरीत कैसे कर सकता हूं, यानी इसे JVM (सैक्सन के बजाय) में डिफ़ॉल्ट XPathFactory का उपयोग करने के लिए मजबूर करता हूं? –

+0

कोई जेम्स नहीं, क्योंकि हम चाहते हैं यहां 'मैचों' जैसे XPath 2.0 फ़ंक्शंस का उपयोग करें। – Donatello

संबंधित मुद्दे