解析与Java问题的XML文件

问题描述:

我试图让这个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

相当简单, 你的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(); 
    }