我正在尝试学习如何从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“人”。现在我设法为安吉丽娜展示了一行价值但是它没有显示给玛蒂娜。现在需要了解一些非常感谢的帮助谢谢=)
答案 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
通过这种方式,您可以确保为每个人获取正确的详细信息。