2012-01-11 11 views
5

का उपयोग कर विशेषताओं वाले खाली XML तत्वों को क्वेरी करें I XML फ़ाइल क्वेरी करने के लिए XPATH अभिव्यक्ति इंजन के साथ अपाचे कॉमन्स कॉन्फ़िगरेशन XML कॉन्फ़िगरेशन ऑब्जेक्ट का उपयोग कर रहा हूं। मैं xpath और apache commons के लिए नया हूँ और वाक्यविन्यास के साथ परेशानी हो रही है।apache commons कॉन्फ़िगरेशन xpath

xml फ़ाइल लगता है:

<attrs> 
    <attr name="my_name" val="the_val"/> 
    <attr name="my_name2" val="the_val2"/> 
</attrs> 

क्या मैं मूल रूप से क्या करना चाहते हैं सभी विशेषताओं के माध्यम से आम पाश के साथ है और प्रत्येक पंक्ति में नाम और वैल पढ़ें। सबकुछ पकड़ने के लिए मैं एकमात्र तरीका काम कर सकता हूं, नाम के मूल्य के साथ फिर से एक्सएमएल से पूछताछ करना है। इस तरह का मुझे गलत लगता है, क्या ऐसा करने का एक बेहतर तरीका है?

List<String> names = config.getList("attrs/attr/@name"); 
for(String name : names) 
{ 
    String val = config.getString("attrs/attr[@name='" +name +"']/@val"); 
    System.out.println("name:" +name +" VAL:" +val); 
} 

इसके अलावा स्ट्रिंग पर शीर्ष पर रूपांतरण, मुझे यकीन नहीं है कि इससे निपटने का उचित तरीका है।

+0

कोशिश इस 'attrs/attr/@ नाम के लिए मूल्य प्रथम नाम प्राप्त करना चाहते हैं | // attr/@ val' – RanRag

+0

यह दोनों मानों को मिला लेकिन एक लंबी स्ट्रिंग सूची में जैसे कि सभी नाम सभी मूल्यों के बाद निकले। हालांकि वे क्रम में हैं, आपको शायद कुछ गणित करना होगा जैसे val_pos = size()/2, फिर i + val_pos प्राप्त करें जैसे आप लूप करते हैं। बहुत साफ नहीं है लेकिन कुछ प्रश्नों को बचाता है। अभी तक समय की बाधाओं के कारण स्पष्टता के लिए फिर से पूछताछ करने के लिए चिपकने जा रहा है, लेकिन फिर भी उस प्रारूप में मौजूद कॉमन्स के साथ एक एक्सएमएल फ़ाइल पर लूप करने का एक अच्छा तरीका है। –

उत्तर

4

एक विकल्प attr तत्वों का चयन करें और HierarchicalConfiguration वस्तुओं के रूप में उन पुनरावृति करने के लिए है:

List<HierarchicalConfiguration> nodes = config.configurationsAt("attrs/attr"); 
for(HierarchicalConfiguration c : nodes) { 
    ConfigurationNode node = c.getRootNode(); 
    System.out.println(
     "name:" + ((ConfigurationNode) 
          node.getAttributes("name").get(0)).getValue() + 
     " VAL:" + ((ConfigurationNode) 
          node.getAttributes("val").get(0)).getValue()); 
} 

कि बहुत सुंदर नहीं है, लेकिन यह काम करता है।

+0

यह वास्तव में काम करता है। मैंने दोनों कार्यों को समय देने की कोशिश की और यह तेजी से बाहर आया (नैनोसेकंड)। मूल: 2 9 5,377,206 यह: 12,712,510 धन्यवाद! इस विधि के साथ काम करेंगे। –

0

कॉमन्स एक्सएमएल कॉन्फ़िगरेशन का उपयोग करते हुए इस XML नमूने में दिए गए गुण से मेल खाने वाले टैग का मूल्य कैसे प्राप्त किया जा सकता है?

<attrs> 
    <attr name="my_name"> First Name</attr> 
    <attr name="my_name2"> First Name 2 </attr> 
</attrs> 

एक मिलान my_name विशेषता मान

+0

आपको उत्तर भाग में प्रश्न नहीं पूछना चाहिए। यह मंचों की तरह नहीं है। आप टिप्पणी कर सकते हैं या एक नया सवाल पूछ सकते हैं। –

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