2010-07-03 10 views
12

से एक चर भेजना मेरे पास एक XPath अभिव्यक्ति है जो स्थिर मान की खोज करती है।XPath को जावा

XPathExpression expr = xpath.compile("//doc[contains(., 'test')]/*/text()"); 

मैं कैसे एक निश्चित स्ट्रिंग के बजाय एक चर पारित कर सकते हैं: इस उदाहरण में, "परीक्षण" है कि मूल्य है? मैं एक्लिप्स के साथ जावा का उपयोग करता हूं। XPath चर घोषित करने के लिए जावा String के मान का उपयोग करने का कोई तरीका है?

उत्तर

17

उदाहरण के लिए आप एक चर समाधानकर्ता परिभाषित कर सकते हैं और इस तरह के रूप में $myvar अभिव्यक्ति संकल्प चर का मूल्यांकन है,:

XPathExpression expr = xpath.compile("//doc[contains(., $myVar)]/*/text()");

एक काफी अच्छा स्पष्टीकरण here नहीं है। मैंने वास्तव में अपने आप से पहले यह नहीं किया है, इसलिए मुझे जाना होगा और एक और पूर्ण उदाहरण प्रदान करना होगा।


अद्यतन:

इस एक जाना देखते हुए, एक का इलाज काम करता है। एक बहुत ही सरल कार्यान्वयन का एक उदाहरण के लिए, आप एक वर्ग है कि किसी भी चर के लिए मान देता है एक नक्शे से, इस तरह निर्धारित कर सकते हैं: अब,

class MapVariableResolver implements XPathVariableResolver { 
    // local store of variable name -> variable value mappings 
    Map<String, String> variableMappings = new HashMap<String, String>(); 

    // a way of setting new variable mappings 
    public void setVariable(String key, String value) { 
    variableMappings.put(key, value); 
    } 

    // override this method in XPathVariableResolver to 
    // be used during evaluation of the XPath expression  
    @Override 
    public Object resolveVariable(QName varName) { 
    // if using namespaces, there's more to do here 
    String key = varName.getLocalPart(); 
    return variableMappings.get(key); 
    } 
} 

घोषित करने और इस कार्यक्रम में इस समाधानकर्ता का एक उदाहरण आरंभ, उदाहरण

MapVariableResolver vr = new MapVariableResolver() ; 
vr.setVariable("myVar", "text"); 
... 
XPath xpath = factory.newXPath(); 
xpath.setXPathVariableResolver(vr); 

के लिए फिर, XPath अभिव्यक्ति XPathExpression expr = xpath.compile("//doc[contains(., $myVar)]/*/text()"); के मूल्यांकन के दौरान, चर $myVar स्ट्रिंग text से बदल दिया जाएगा।

अच्छा सवाल, मैंने कुछ उपयोगी खुद सीखा!

0

आपको जावा का मूल्यांकन करने की आवश्यकता नहीं है (या XPath में और भी पीएल चर)। सी # में (जावा में अच्छी तरह से पता नहीं) मैं का उपयोग करेंगे:

string XPathExpression = 
"//doc[contains(., " + myVar.ToString() + ")]/*/text()"; 

    XmlNodelist result = xmlDoc.SelectNodes(XPathExpression); 
+1

मैं सच चर उपयोग करने की संभावना की तुलना में, चर थोड़ा बोझिल की सरल इनलाइन किए जाने वाले हैं। इसके अलावा, आपको वाक्य रचनात्मक अखंडता के बारे में सोचना होगा (उदाहरण के लिए यदि 'myVar' में उद्धरण शामिल हैं? आदि) –

0
इस answer here से

अलावा, कि अच्छी तरह से बताते हैं कि कैसे मानक जावा एपीआई के साथ यह करने के लिए, आप भी तरह एक तृतीय-पक्ष लाइब्रेरी इस्तेमाल कर सकते हैं jOOX कि एक सरल तरीके से चर संभाल कर सकते हैं:

List<String> list = $(doc).xpath("//doc[contains(., $1)]/*", "test").texts();