2017-05-30 71 views
0

我想將XML導入到jTable。 我創建表單,但該表不是字段與xml數據的代碼沒有錯誤。Java從XML導入到jTable

這裏是我的代碼:

private void Tabela() {       
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
try{ 
DocumentBuilder builder = domFactory.newDocumentBuilder(); 
    Document doc = builder.parse("testxml.xml"); 

    Element root = doc.getDocumentElement(); 

    NodeList nodelist1 = root.getChildNodes(); 

    String[] st = new String[4]; 

    for (int i = 0; i < nodelist1.getLength(); i++) 
    { 
     Node node = nodelist1.item(i); 
     if (node.getNodeType() == node.ENTITY_NODE) { 
      st[0] = node.getChildNodes().item(1).getTextContent(); 
      st[1] = node.getChildNodes().item(3).getTextContent(); 
      st[2] = node.getChildNodes().item(5).getTextContent(); 
      st[3] = node.getChildNodes().item(7).getTextContent(); 
      ((DefaultTableModel) jTable1.getModel()).addRow(st); 
     } 
    } 
} 
catch(Exception ex) 
{ 
    System.out.print("error"); 
} 
} 

XML:

<?xml version="1.0" encoding="UTF-8"?> 
    <note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
    </note> 

當我運行我的程序表是空的。

+0

<?XML版本= 「1.0」 編碼= 「UTF-8」> 託弗 賈尼 提醒 唐這週末不要忘記我! ' – aaaa

回答

0

a)您需要檢查節點是否爲ELEMENT_NODE。使用Node.ELEMENT_NODE,而不是實例的。例如,實體節點是代表DTD中實體的節點。

b)您正將一個字符串值分配給st中的所有元素。您需要先收集它們,然後分配給您的陣列。最好的方法是將它們收集在一個列表中。

c)始終在catch塊中打印堆棧跟蹤。否則,你將不知道來自哪裏的異常。

您的代碼應看起來像:

 DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
     try 
     { 
      DocumentBuilder builder = domFactory.newDocumentBuilder(); 
      Document doc = builder.parse("testxml.xml"); 

      Element root = doc.getDocumentElement(); 

      NodeList nodelist1 = root.getChildNodes(); 

      String[] st = null; 
      List<String> texts = new ArrayList<String>(); 
      for (int i = 0; i < nodelist1.getLength(); i++) 
      { 
       Node node = nodelist1.item(i); 
       if (node.getNodeType() == Node.ELEMENT_NODE) 
       { 
        texts.add(node.getTextContent()); 

       } 
      } 

      st = texts.toArray(new String[]{}); 


      System.out.println(Arrays.toString(st)); 

      DefaultTableModel model = (DefaultTableModel)jTable1.getModel(); 

      model.addRow( st); 

     } 
     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
      System.out.print("error"); 
     } 
+0

謝謝作品完美 – aaaa