Java에서 sax 파서로 xml 파일을 구문 분석하고 XML 요소로 JTable
을 채우려고합니다. 구문 분석이 잘 수행되고 JTable
이 생성되지만 문제는 모든 요소가 동일한 행에 있고 동일한 행이 반복된다는 것입니다. 제발 도와주세요. 여기 내 코드입니다 : 내가 얻을JTable에 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>
그리고 테이블을는 다음과 같다 :! [여기 이미지 설명을 입력합니다] [1]
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();
}
}
}
내 원래 XML 파일은 folowing입니다
나는 무엇이 오류인지 이해하지 못했다! 당신의 startElement
방법에서
1) 코드 블록에 일관되고 논리적 인 들여 쓰기를 사용하십시오. 코드의 들여 쓰기는 사람들이 프로그램 흐름을 이해하도록 돕기위한 것입니다! 2)'! [여기에 이미지 설명을 입력하십시오.] [1]'뭔가 잘못되었습니다. 관련 스크린 샷이있는 경우 이미지 공유 사이트에 업로드하여 링크하십시오. –
이미지 링크를 찾을 수 없습니다. – trashgod