안녕하세요, 내 XML 파일을 읽으려면 어떻게해야하는지 알아내는 데 어려움이 있습니다.XML로 SAX 구문 분석
나는 Sax를 사용하지만 나는 "ansArray"의 자식 노드를 SAX가 읽을 수있게하는 것 같습니다. 내 XML이 잘못된 형식으로 작성되었는지 확실하지 않아서 도움이 될 것입니다.
NB "AnsArray"에 4 개의 문자열 항목이있는 XStream을 사용하여 XML 문서가 저장되었습니다.
XML의 DOC : 위의 XML 파일에서
<?xml version="1.0" encoding="utf-8" ?>
<questionList>
<Question>
<id>-1</id>
<question>"Who Was Sleepless In Seattle With Meg Ryan?"</question>
<ansArray>
<string>"Bruce Willis"</string>
<string>"Arnie Schwarzenegger"</string>
<string>"Joe Pesci"</string>
<string>"Tom Hanks"</string>
</ansArray>
<correctAns>4</correctAns>
<iDifficulty>2</iDifficulty>
</Question>
<Question>
<id>-1</id>
<question>"who was the Terminator?"</question>
<ansArray>
<string>"John Travolta"</string>
<string>"Stevan Segal"</string>
<string>"Arnie Schwarzenegger"</string>
<string>"Al Pacino"</string>
</ansArray>
<correctAns>3</correctAns>
<iDifficulty>3</iDifficulty>
</Question>
</questionList>
내가 ansArray의 자식 noes를 제외한 모든 것을 읽을 수 있습니다 즉
<ansArray>
<string>"John Travolta"</string>
<string>"Stevan Segal"</string>
<string>"Arnie Schwarzenegger"</string>
<string>"Al Pacino"</string>
</ansArray>
SAX의 XML 코드 :
import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAX_XMLReader extends DefaultHandler {
boolean currentElement = false;
String currentValue = "";
static Question question;
static ArrayList<Question> questionList=new ArrayList<Question>();
ArrayList<String> sAnswers=new ArrayList<String>(4);
public static ArrayList<Question> getquestionList() {
return questionList;
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
currentElement = true;
//System.out.println("qName = "+qName);
if (qName.equals("questionList")) {
questionList = new ArrayList<Question>();
} else if (qName.equals("Question")) {
question = new Question();
} //how to handle the answer string array
else if (qName.equalsIgnoreCase("ansArray")) {
//??
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
currentElement = false;
//System.out.println("qName = "+qName);
if(qName.equals("question"))
{
question.setQuestion(currentValue.trim());
//System.out.println("Q: "+currentValue.trim());
}
else if (qName.equalsIgnoreCase("correctAns")) {
question.setCorrectAns(Integer.parseInt(currentValue.trim()));
}
else if (qName.equalsIgnoreCase("iDifficulty")) {
question.setiDifficulty(Integer.parseInt(currentValue.trim()));
}
else if (qName.equalsIgnoreCase("ansArray")) {
//??
}
else if (qName.equals("Question")) {
questionList.add(question);
}
currentValue = "";
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (currentElement) {
currentValue = currentValue + new String(ch, start, length);
}
}
}
질문 클래스 :
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
//change string array to list
public class Question implements Serializable{
private int id=-1;
private String question="";
//private String[] ansArray = new String[4];
ArrayList<String> sAnswers=new ArrayList<String>(4);
private int correctAns=-1;
private int iDifficulty=-1;
public Question(){
//sAnswers=new ArrayList<String>();
for(int x=0;x<4;x++){
sAnswers.add("default answer "+x);
}
}
//testing contructor
public Question(int id,String sQuestion){
this.id=id;
this.question =sQuestion;
}
public Question(int id,String sQuestion,String sAns1){
this.id=id;
this.question =sQuestion;
this.sAnswers.add(sAns1);
//this.ansArray[0]=sAns1;
}
public Question(String sQuestion,String sAns1,String sAns2,String sAns3,String sAns4,int iCorrectAns){
this.question =sQuestion;
this.sAnswers.add(sAns1);
this.sAnswers.add(sAns2);
this.sAnswers.add(sAns3);
this.sAnswers.add(sAns4);
this.correctAns =iCorrectAns;
}
//constuctor with difficuly int(1-15)
public Question(String sQuestion,String sAns1,String sAns2,String sAns3,String sAns4,int iCorrectAns,int iDifficulty){
this.question =sQuestion;
this.sAnswers.add(sAns1);
this.sAnswers.add(sAns2);
this.sAnswers.add(sAns3);
this.sAnswers.add(sAns4);
this.correctAns =iCorrectAns;
this.iDifficulty=iDifficulty;
}
//constuctor with difficuly int(1-15)
public Question(int id,String sQuestion,String sAns1,String sAns2,String sAns3,String sAns4,int iCorrectAns,int iDifficulty){
this.id=id;
this.question =sQuestion;
this.sAnswers.add(sAns1);
this.sAnswers.add(sAns2);
this.sAnswers.add(sAns3);
this.sAnswers.add(sAns4);
this.correctAns =iCorrectAns;
this.iDifficulty=iDifficulty;
}
public int getiDifficulty() {
return iDifficulty;
}
public void setiDifficulty(int iDifficulty) {
this.iDifficulty = iDifficulty;
}
public int getID() {
return id;
}
public void setID(int id) {
this.id = id;
}
public String getQuestion() {
return question;
}
public void setQuestion(String question) {
this.question = question;
}
public String getAnswer(int i){
return sAnswers.get(i);
}
public void setAnswer(int i,String answer){
sAnswers.add(answer);
}
//get the correct answer as a string
public String sGetCorrectAnswer(){
return sAnswers.get(correctAns);
}
public String getAnswersList()
{
String s="\nA) " + sAnswers.get(0) +
"\nB) " + sAnswers.get(1) +
"\nC) " + sAnswers.get(2) +
"\nD) " + sAnswers.get(3);
return s;
}
public int getiCorrectAns() {
return correctAns;
}
public void setCorrectAns(int correctAns) {
this.correctAns = correctAns;
}
@Override
public String toString(){
String log ="\n\nQuestion by ID" +
"\n\nId: "+this.getID()+
"\nQuestion: " + this.getQuestion() +
" \nAns1: " + this.getAnswer(0) +
" \nAns2: " + this.getAnswer(1) +
" \nAns3: " + this.getAnswer(2) +
" \nAns4: " + this.getAnswer(3) +
" \nCorrectAns: " + this.getiCorrectAns()+
" \nDifficulty: " + this.getiDifficulty()
;
return log;
}
}
음 .. 왜 XmlPullParser를 사용하지 않습니까? –
Sax-parser는 XML 파일을 읽는 아주 좋은 방법입니다. 그것은 많은 플랫폼에서 지원되며 당신은 그것으로 vety 큰 XML 파일을 구문 분석 할 수 있습니다. – AlexS