Java从XML导入到jTable

时间:2017-05-30 14:09:44

标签: java xml swing

我想将XML导入jTable。 我创建表单,但表不是带有xml数据的字段,代码没有错误。

这是我的代码:

 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>

当我运行我的程序时,表格为空。

1 个答案:

答案 0 :(得分: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");
        }