帮助XML到JTable请

时间:2010-09-20 00:30:22

标签: java xml jtable

我正在尝试学习如何从XML导入到JTable。我正在分析以下代码,试图了解正在发生的事情。问题是我无法弄清楚为什么我没有在JTable中看到任何值。我确信使用DOMBuilder等解析XML。我已经包含了我正在使用的代码和XML文件。
提前谢谢了!附:将person.xml文件放入项目文件夹中。

import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class XMLInJTable extends AbstractTableModel {
        Vector data;
        Vector columns;

        public XMLInJTable() {
                try {
                        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                        DocumentBuilder db = dbf.newDocumentBuilder();
                        Document doc = db.parse("person.xml");

                        NodeList nl = doc.getElementsByTagName("Name");
                        NodeList n2 = doc.getElementsByTagName("Address");
                        NodeList n3 = doc.getElementsByTagName("ContactNo");
                        NodeList listOfPersons = doc.getElementsByTagName("person");
                        String data1 = "", data2 = "", data3 = "";
                        data = new Vector();
                        columns = new Vector();
                        for (int i = 0; i < listOfPersons.getLength(); i++) {
                                data1 = nl.item(i).getFirstChild().getNodeValue();
                                data2 = n2.item(i).getFirstChild().getNodeValue();
                                data3 = n3.item(i).getFirstChild().getNodeValue();
                                String line = data1 + " " + data2 + " " + data3;
                                StringTokenizer st2 = new StringTokenizer(line, " ");
                                while (st2.hasMoreTokens())
                                        data.addElement(st2.nextToken());
                        }
                        columns.add("");
                        columns.add("");
                        columns.add("");

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

        public int getRowCount() {
                return data.size() / getColumnCount();
        }

        public int getColumnCount() {
                return columns.size();
        }

        public Object getValueAt(int rowIndex, int columnIndex) {
                return (String) data.elementAt((rowIndex * getColumnCount())
                                + columnIndex);
        }

        public static void main(String argv[]) throws Exception {
                XMLInJTable t = new XMLInJTable();
                JTable table = new JTable();
                table.setModel(t);
                JScrollPane scrollpane = new JScrollPane(table);
                JPanel panel = new JPanel();
                panel.add(scrollpane);
                JFrame frame = new JFrame();
                frame.add(panel, "Center");
                frame.pack();
                frame.setVisible(true);
        }
}

person.xml

<?xml version="1.0"  encoding="UTF-8"  standalone="no"?>

<Person>
<Name>Angelina</Name>
<Address>Dehi</Address>
<ContactNo>111111</ContactNo>

<Name>Martina</Name>
<Address>Mumbai</Address>
<ContactNo>222222</ContactNo>

</Person>

编辑*我设法让它工作,这是因为行:

NodeList listOfPersons = doc.getElementsByTagName("person");
每当它应该是首都P时,

包含一个小字母p“人”。现在我设法为安吉丽娜展示了一行价值但是它没有显示给玛蒂娜。现在需要了解一些非常感谢的帮助谢谢=)

1 个答案:

答案 0 :(得分:1)

问题可能出在person.xml;它应该是这样的:

<?xml version="1.0"  encoding="UTF-8"  standalone="no"?>

<Persons>

<Person>
<Name>Angelina</Name>
<Address>Dehi</Address>
<ContactNo>111111</ContactNo>
</Person>

<Person>
<Name>Martina</Name>
<Address>Mumbai</Address>
<ContactNo>222222</ContactNo>
</Person>

</Persons>

否则,listOfPersons.getLength()始终为1。

EDIT2: 另外,我建议您遍历节点,如下面的伪代码:

for each <person> in <persons>
  for each child in <person>
    if child tag name is "Name"
      # do something 
    else if child tag name is "Address"
      # do something
    else if child tag name is "ContactNo"
      # do something

通过这种方式,您可以确保为每个人获取正确的详细信息。