2017-05-30 65 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