2017-04-03 101 views
0

我試圖讓這個XML文件解析與Java問題的XML文件

<CATALOG> 
<CD> 
<TITLE>Empire Burlesque</TITLE> 
<ARTIST>Bob Dylan</ARTIST> 
<COUNTRY>USA</COUNTRY> 
<COMPANY>Columbia</COMPANY> 
<PRICE>10.90</PRICE> 
<YEAR>1985</YEAR> 
</CD> 
<CD> 
<TITLE>Hide your heart</TITLE> 
<ARTIST>Bonnie Tyler</ARTIST> 
<COUNTRY>UK</COUNTRY> 
<COMPANY>CBS Records</COMPANY> 
<PRICE>9.90</PRICE> 
<YEAR>1988</YEAR> 
</CD> 
<CD> 
<TITLE>Unchain my heart</TITLE> 
<ARTIST>Joe Cocker</ARTIST> 
<COUNTRY>USA</COUNTRY> 
<COMPANY>EMI</COMPANY> 
<PRICE>8.20</PRICE> 
<YEAR>1987</YEAR> 
</CD> 
</CATALOG> 

要使用此輸出解析

parsing cd_catalog.xml 
Document root node is: CATALOG 
First CD Data: 
Empire Burlesque 
Bob Dylan 
USA 
Columbia 
10.90 
1985 
Second CD Data: 
Hide your heart 
Bonnie Tyler 
UK 
CBS Records 
9.90 
1988 
Last CD Data: 
Unchain my heart 
Joe Cocker 
USA 
EMI 
8.20 
1987 
Total Number of CDs is: 26 

我有這樣的代碼,低於該做解析,但是它輸出每個CD的「第一張CD數據」,我需要去「第一張CD數據」,「第二張CD數據」和「最後一張CD數據」。

private static void printNodes() { 


     Element root = document.getDocumentElement(); 
     System.out.println(root.getNodeName()); 

     //Get all CDS 
     NodeList nList = document.getElementsByTagName("CD"); 
     System.out.println("============================"); 

     for (int temp = 0; temp < 2; temp++) 
     { 
     Node node = nList.item(temp); 
     System.out.println(""); 
     if (node.getNodeType() == Node.ELEMENT_NODE) 
     { 
      //Print each CD's details 
      Element eElement = (Element) node; 
      System.out.println("First CD data is : " + eElement.getAttribute("TITLE")); 
      System.out.println(eElement.getElementsByTagName("ARTIST").item(0).getTextContent()); 
      System.out.println(eElement.getElementsByTagName("COUNTRY").item(0).getTextContent()); 
      System.out.println(eElement.getElementsByTagName("COMPANY").item(0).getTextContent()); 
      System.out.println(eElement.getElementsByTagName("PRICE").item(0).getTextContent()); 
      System.out.println(eElement.getElementsByTagName("YEAR").item(0).getTextContent()); 



     } 
     } 

    } 

我的計劃是採取了循環我已經下降到1所以它打印了所有的第一張CD的數據,然後再拍for循環的下一張CD,但我不知道如何找到CD在數組列表中,然後我會爲最後一張CD做些什麼。

+0

你的循環被明確打印 「初次CD的數據是:」 每一次 - 嘗試改變它根據循環迭代選擇不同的字符串。 – Quietust

回答

0

相當簡單, 你的XML轉換爲JAXB類 使用在線轉換器:http://pojo.sodhanalibrary.com/

嘗試{

File file = new File("cd_catalog.xml"); 
    JAXBContext jaxbContext = JAXBContext.newInstance(Catalog.class); 

    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
    Catalog cat= (Catalog) jaxbUnmarshaller.unmarshal(file); 

    List<CD> list=cat.getCD(); 
    for(CD cd:list) 
     System.out.println(cd.getArtist()); 

    } catch (JAXBException e) { 
    e.printStackTrace(); 
    }