2011-12-09 11 views
25

मैं सभी "<Type>" तत्वों को ले कर एक URL से एक XML फ़ाइल को पार्स करने का प्रयास कर रहा हूं जहां पैरामीटर टाइप_आईडी = "4218" है ??विशिष्ट विशेषता मान के साथ विशिष्ट XML तत्व कैसे प्राप्त करें?

XML दस्तावेज़:

<BSQCUBS Version="0.04" Date="Fri Dec 9 11:43:29 GMT 2011" MachineDate="Fri, 09 Dec 2011 11:43:29 +0000"> 
    <Class class_id="385"> 
    <Title>Football Matches</Title> 
    <Type type_id="4264" type_minbet="0.1" type_maxbet="2000.0"> 
     ... 
    </Type> 
    <Type type_id="5873" type_minbet="0" type_maxbet="0"> 
     ... 
    </Type> 
    <Type type_id="4725" type_minbet="0.1" type_maxbet="2000.0"> 
     ... 
    </Type> 
    <Type type_id="4218" type_minbet="0.1" type_maxbet="2000.0"> 
     ... 
    </Type> 
    <Type type_id="4221" type_minbet="0.1" type_maxbet="2000.0"> 
     ... 
    </Type> 
    <Type type_id="4218" type_minbet="0.1" type_maxbet="2000.0"> 
     ... 
    </Type> 
    <Type type_id="4299" type_minbet="0.1" type_maxbet="2000.0"> 
     ... 
    </Type> 
    </Class> 
</BSQCUBS> 

यहाँ मेरी जावा कोड है:

DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.parse(new URL("http://cubs.bluesq.com/cubs/cubs.php?action=getpage&thepage=385.xml").openStream()); 

doc.getDocumentElement().normalize(); 

NodeList nodeList = doc.getElementsByTagName("Type"); 
System.out.println("ukupno:"+nodeList.getLength()); 
if (nodeList != null && nodeList.getLength() > 0) { 
    for (int j = 0; j < nodeList.getLength(); j++) { 
    Element el = (org.w3c.dom.Element) nodeList.item(j); 
    type_id = Integer.parseInt(el.getAttribute("type_id")); 
    System.out.println("type id:"+type_id); 
    } 
} 

इस कोड को मुझे सभी तत्वों को देता है, मुझे लगता है कि, मैं सभी तत्वों को चाहते हैं नहीं करना चाहती है, जहां विशेषता type_id = "4218"!

उत्तर

23

XPath आपके लिए सही विकल्प है:

/BSQCUBS/Class/Type[@type_id=4218] 

तो आप का उपयोग कर सकते हैं:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document doc = builder.parse("<Your xml doc uri>"); 
XPathFactory xPathfactory = XPathFactory.newInstance(); 
XPath xpath = xPathfactory.newXPath(); 
XPathExpression expr = xpath.compile("//Type[@type_id=\"4218\"]"); 
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 

और पुनरावृति nl

+0

मैं कैसे की तरह ऑपरेटर के साथ type_id में मूल्य के लिए खोज –

4

आप XPath.XPath का उपयोग XML दस्तावेज़ में तत्वों और विशेषताओं के माध्यम से नेविगेट करने के लिए किया जा सकता है। जावा में एक्सपैथ के कुछ अच्छे कार्यान्वयन हैं।

के लिए आप उदाहरण

XPath xpath = XPathFactory.newInstance().newXPath(); 
XPathExpression expr = xpath.compile("//Type[@type_id=\"4218\"]"); 
Object exprResult = expr.evaluate(doc, XPathConstants.NODESET); 
NodeList nodeList = (NodeList) exprResult; 
7

आप अपने पाश अंदर एक शर्त छूट रहा है:

if(nodeList != null && nodeList.getLength() > 0){ 
    for (int j = 0; j < nodeList.getLength(); j++) { 
     Element el = (org.w3c.dom.Element) nodeList.item(j); 
     if (el.hasAttribute("type_id") && el.getAttribute("type_id").equals("4218")) { 
       type_id = Integer.parseInt(el.getAttribute("type_id")); 

       System.out.println("type id:"+type_id); 
     } 
    } 
} 

इसके अलावा, आप अगर NodeList getElementsByTagName द्वारा दिया परीक्षण करने के लिए की जरूरत नहीं है शून्य है ताकि आप निकाल सकते हैं लूप से पहले अगर।

सामान्य स्थिति में आप XPath का उपयोग करके बेहतर हो सकते हैं।

2

के माध्यम से निम्नलिखित XPath आप प्रकार तत्वों दे देंगे के बाद आप कर रहे हैं निम्नलिखित जावा कोड को नोडलिस्ट प्राप्त करने के लिए जिसमें केवल इन्हें शामिल किया गया है:

XPathExpression expr = xpath.compile("/BSQCUBS/Class/Type[@type_id=4218]"); 
NodeList nl = (NodeList)expr.evaluate(doc, XPathConstants.NODESET); 
2

नीचे @soulcheck उत्तर का पालन करें और यदि संभव हो तो ब्रेक स्टेटमेंट डालें ... जो आपकी खोज को बढ़ा सकता है।

if(nodeList != null && nodeList.getLength() > 0){ 
for (int j = 0; j < nodeList.getLength(); j++) { 
    Element el = (org.w3c.dom.Element) nodeList.item(j); 
    if (el.hasAttribute("type_id") && el.getAttribute("type_id").equals("4218")) { 
      type_id = Integer.parseInt(el.getAttribute("type_id")); 

      System.out.println("type id:"+type_id); 
      break; 

    } 
} 

}

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