gpt4 book ai didi

java - 请帮助有关 XML 到 JTable 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:03 24 4
gpt4 key购买 nike

我正在尝试学习如何从 XML 导入到 JTable。我正在分析以下代码,试图了解发生了什么。问题是我无法弄清楚为什么我看不到 JTable 中的任何值。我确信 XML 正在使用 DOMBuilder 等进行解析。我已经包含了我正在使用的代码和 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。现在我已经成功地为 Angelina 显示了一行值,但无法为 Martina 显示。现在需要在一些非常感谢的帮助下解决这个问题,谢谢 =)

最佳答案

问题可能出在 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。

编辑2:另一方面,我建议您像下面的伪代码一样遍历节点:

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

这样您就可以确保获得每个人的正确详细信息。

关于java - 请帮助有关 XML 到 JTable 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com