2013-08-21 4 views
0

사실 내 로컬 호스트에서 xml 구문 분석을 수행하고 값을 회 전자에 검색하려고합니다. 나는 또한 책 노드 (i, e) 안에있는 속성 내부의 값을 검색해야 할 필요가 있는지 궁금합니다. 나는 많은 튜토리얼과 소스 코드를 참조 할 수있다. 어느 누구도 그 일을하도록 도와주세요. 미리 감사드립니다.복잡한 XML에 대한 XML 구문 분석

XML 구조

<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description> 
      An in-depth look at creating applications with XML. 
     </description> 
    </book> 
    <book id="bk102"> 
     <author>Ralls, Kim</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description> 
      A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world. 
     </description> 
    </book> 
    <book id="bk103"> 
     <author>Corets, Eva</author> 
     <title>Maeve Ascendant</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-11-17</publish_date> 
     <description> 
      After the collapse of a nanotechnology society in England, the young survivors lay the foundation for a new society. 
     </description> 
    </book> 
    <book id="bk104"> 
     <author>Corets, Eva</author> 
     <title>Oberon's Legacy</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2001-03-10</publish_date> 
     <description> 
      In post-apocalypse England, the mysterious agent known only as Oberon helps to create a new life for the inhabitants of London. Sequel to Maeve Ascendant. 
     </description> 
    </book> 
</catalog> 

자바 코드

public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener { 
    ArrayList<String> title; 

    Button button; 
    Spinner spinner; 

    ArrayAdapter<String> from_adapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     title = new ArrayList<String>(); 

     button = (Button) findViewById(R.id.button1); 
     spinner = (Spinner) findViewById(R.id.spinner1); 
     spinner.setOnItemSelectedListener(this); 

     button.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       parse(); 

       from_adapter=new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_spinner_item, title); 
       from_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       spinner.setAdapter(from_adapter); 
      } 
     }); 
    } 

    public void onItemSelected(AdapterView<?> parent, View view, int pos, 
      long id) { 
     Toast.makeText(parent.getContext(), ""+spinner.getSelectedItem().toString().trim(), 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onNothingSelected(AdapterView<?> arg0) { 
    } 

    protected void parse() { 
     // TODO Auto-generated method stub 
     try { 
      URL url = new URL(
        "http://10.0.2.2/book.xml"); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(new InputSource(url.openStream())); 
      doc.getDocumentElement().normalize(); 

      NodeList nodeList = doc.getElementsByTagName("book"); 
      for (int i = 0; i < nodeList.getLength(); i++) { 

       Node node = nodeList.item(i);  

       Element idElmnt = (Element) node; 
       NodeList idList = idElmnt.getElementsByTagName("id"); 
       Element idElement = (Element) idList.item(0); 
       idList = idElement.getChildNodes(); 


       Element fstElmnt = (Element) node; 
       NodeList nameList = fstElmnt.getElementsByTagName("author"); 
       Element nameElement = (Element) nameList.item(0); 
       nameList = nameElement.getChildNodes();   


       NodeList websiteList = fstElmnt.getElementsByTagName("title"); 
       Element websiteElement = (Element) websiteList.item(0); 
       websiteList = websiteElement.getChildNodes(); 

       NodeList websiteList1 = fstElmnt.getElementsByTagName("genre"); 
       Element websiteElement1 = (Element) websiteList1.item(0); 
       websiteList1 = websiteElement1.getChildNodes(); 

       NodeList websiteList2 = fstElmnt.getElementsByTagName("price"); 
       Element websiteElement2 = (Element) websiteList2.item(0); 
       websiteList2 = websiteElement2.getChildNodes(); 


       title.add(((Node) idList.item(0)).getNodeValue()+":"+((Node) nameList.item(0)).getNodeValue()+":"+((Node) websiteList.item(0)).getNodeValue() +"\n"+((Node) websiteList1.item(0)).getNodeValue()+"-"+((Node) websiteList2.item(0)).getNodeValue()); 

      } 
     } catch (Exception e) { 
      System.out.println("XML Pasing Excpetion = " + e); 
     } 

    } 
+0

PLZ는 [이] (http://stackoverflow.com/a/18339836/1554935) –

답변

0

하는 루프 내부에이 코드를 사용해보십시오.

for (int i = 0; i < nodeList.getLength(); i++) { 

      Node node = nodeList.item(i);  
      String value=node.getNodeValue();// you can store this in array for all nodes 

      Element idElmnt = (Element) node; 
      NodeList idList = idElmnt.getElementsByTagName("id"); 
      Element idElement = (Element) idList.item(0); 
      idList = idElement.getChildNodes(); 


      Element fstElmnt = (Element) node; 
      NodeList nameList = fstElmnt.getElementsByTagName("author"); 
      Element nameElement = (Element) nameList.item(0); 
      nameList = nameElement.getChildNodes();   


      NodeList websiteList = fstElmnt.getElementsByTagName("title"); 
      Element websiteElement = (Element) websiteList.item(0); 
      websiteList = websiteElement.getChildNodes(); 

      NodeList websiteList1 = fstElmnt.getElementsByTagName("genre"); 
      Element websiteElement1 = (Element) websiteList1.item(0); 
      websiteList1 = websiteElement1.getChildNodes(); 

      NodeList websiteList2 = fstElmnt.getElementsByTagName("price"); 
      Element websiteElement2 = (Element) websiteList2.item(0); 
      websiteList2 = websiteElement2.getChildNodes(); 


      title.add(((Node) idList.item(0)).getNodeValue()+":"+((Node) nameList.item(0)).getNodeValue()+":"+((Node) websiteList.item(0)).getNodeValue() +"\n"+((Node) websiteList1.item(0)).getNodeValue()+"-"+((Node) websiteList2.item(0)).getNodeValue()); 

     } 
    } catch (Exception e) { 
     System.out.println("XML Pasing Excpetion = " + e); 
    } 
+0

미안 명확하게 말해주십시오 참조하십시오. –

+0

코드가 작동하지 않습니다. :( –