Java 将XML元素放入JTable
我试图用Java中的sax解析器解析xml文件,然后用xml元素填充Java 将XML元素放入JTable,java,xml,swing,jtable,sax,Java,Xml,Swing,Jtable,Sax,我试图用Java中的sax解析器解析xml文件,然后用xml元素填充JTable。解析做得很好,创建了JTable,但问题是所有元素都放在同一行中,并且重复同一行。请帮忙。这是我的密码: package read; //import java.util.ArrayList; import java.awt.BorderLayout; import java.util.ArrayList; import java.util.List; import java.util.Vector; impor
JTable
。解析做得很好,创建了JTable
,但问题是所有元素都放在同一行中,并且重复同一行。请帮忙。这是我的密码:
package read;
//import java.util.ArrayList;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Read {
public static Vector<Vector> rowData = new Vector<Vector>();
public static Vector<String> rowOne = new Vector<String>();
public static void main(String argv[]) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler;
handler = new DefaultHandler() {
// private List<Personne> satff;
boolean bstaff = false;
boolean bfname = false;
boolean blname = false;
boolean bnname = false;
boolean bsalary = false;
private int i;
public void startElement(String uri, String localName, String
qName, Attributes attributes) throws SAXException {
System.out.println("Start Element :" + qName);
if (qName.equalsIgnoreCase("staff")) {
bstaff = true;
}
if (qName.equalsIgnoreCase("FIRSTNAME")) {
bfname = true;
}
if (qName.equalsIgnoreCase("LASTNAME")) {
blname = true;
}
if (qName.equalsIgnoreCase("NICKNAME")) {
bnname = true;
}
if (qName.equalsIgnoreCase("SALARY")) {
bsalary = true;
}
}
public void endElement(String uri, String localName,
String qName) throws SAXException {
System.out.println("End Element :" + qName);
if ("staff".equals(qName)) {
rowData.addElement(rowOne);
};
}
@Override
public void characters(char ch[], int start, int length) {
if (bfname) {
String s = new String(ch, start, length);
rowOne.addElement(s);
System.out.println("First Name : " + new String(ch, start, length));
bfname = false;
}
if (blname) {
rowOne.addElement(new String(ch, start, length));
System.out.println("Last Name : " + new String(ch, start, length));
blname = false;
}
if (bnname) {
rowOne.addElement(new String(ch, start, length));
System.out.println("Nick Name : " + new String(ch, start, length));
bnname = false;
}
if (bsalary) {
rowOne.addElement(new String(ch, start, length));
System.out.println("Salary : " + new String(ch, start, length));
//rowData.addElement(rowOne);
bsalary = false;
}
System.out.println("longueur" + rowOne.size());
}
};
saxParser.parse("file.xml", handler);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Vector<String> columnNames = new Vector<String>();
columnNames.addElement("firstname");
columnNames.addElement("lastname");
columnNames.addElement("nickname");
columnNames.addElement("salary");
columnNames.addElement(" ");
columnNames.addElement(" ");
columnNames.addElement(" ");
columnNames.addElement(" ");
JTable table = new JTable(rowData, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
包读取;
//导入java.util.ArrayList;
导入java.awt.BorderLayout;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Vector;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.xml.parsers.SAXParser;
导入javax.xml.parsers.SAXParserFactory;
导入org.xml.sax.Attributes;
导入org.xml.sax.SAXException;
导入org.xml.sax.helpers.DefaultHandler;
公开课阅读{
公共静态向量rowData=新向量();
公共静态向量rowOne=新向量();
公共静态void main(字符串argv[]){
试一试{
SAXParserFactory=SAXParserFactory.newInstance();
SAXParser SAXParser=factory.newSAXParser();
默认处理程序;
handler=新的DefaultHandler(){
//私人名单;
布尔bstaff=false;
布尔bfname=false;
布尔blname=false;
布尔bnname=false;
布尔值bsalary=false;
私人互联网i;
public void startElement(字符串uri、字符串localName、字符串
qName、属性)引发SAXException{
System.out.println(“起始元素:+qName”);
if(qName.equalsIgnoreCase(“员工”)){
bstaff=真;
}
if(qName.equalsIgnoreCase(“FIRSTNAME”)){
bfname=true;
}
if(qName.equalsIgnoreCase(“LASTNAME”)){
blname=true;
}
if(qName.equalsIgnoreCase(“昵称”)){
bnname=true;
}
if(qName.equalsIgnoreCase(“工资”)){
b拉里=真;
}
}
public void endElement(字符串uri、字符串localName、,
字符串(qName)引发异常{
System.out.println(“结束元素:+qName”);
if(“staff”.equals(qName)){
rowData.addElement(rowOne);
};
}
@凌驾
公共无效字符(字符ch[],整数开始,整数长度){
if(bfname){
字符串s=新字符串(ch、开始、长度);
第1行。附录;
System.out.println(“名字:+新字符串(ch,start,length));
bfname=false;
}
如果(blname){
addElement(新字符串(ch,start,length));
System.out.println(“姓氏:+新字符串(ch,start,length));
blname=false;
}
如果(bnname){
addElement(新字符串(ch,start,length));
System.out.println(“昵称:+新字符串(ch,start,length));
bnname=false;
}
如果(b拉里){
addElement(新字符串(ch,start,length));
System.out.println(“工资:+新字符串(ch,start,length));
//rowData.addElement(rowOne);
b报警=假;
}
System.out.println(“longueur”+rowOne.size());
}
};
parse(“file.xml”,handler);
JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
向量列名称=新向量();
columnNames.addElement(“名字”);
columnNames.addElement(“lastname”);
columnNames.addElement(“昵称”);
列名。附录(“工资”);
columnNames.addElement(“”);
columnNames.addElement(“”);
columnNames.addElement(“”);
columnNames.addElement(“”);
JTable table=新的JTable(行数据、列名称);
JScrollPane scrollPane=新的JScrollPane(表);
frame.add(滚动窗格,BorderLayout.CENTER);
框架。设置尺寸(300150);
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
}
我的原始XML文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<staff >
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
</staff>
<staff >
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
</company>
勇
木金
mkyong
100000
低的
尹芳
芳芳
200000
我得到的表格如下:![在此处输入图像描述][1]
我不明白是什么错误 在您的
startElement
方法中,更改为:
if (qName.equalsIgnoreCase("staff"))
{
rowOne = new Vector<String>();
bstaff = true;
}
if(qName.equalsIgnoreCase(“staff”))
{
rowOne=新向量();
bstaff=真;
}
其他
if
语句保持不变。每个staff
元素都放在向量中 1)对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程!2) ![在此处输入图像描述][1]
此处出现问题。如果您有相关的屏幕截图,请将其上载到图像共享网站并链接到它。我找不到您的图像链接。