Hallo Community,
ich programmiere gerade einen chinesisch Vokabeltrainer der die Vokabeln aus einer XML-Datei ausliest und in ein JTable speichert. Das funkioniert sehr gut, nur jedes 50. Wort ist abgeschnitten und ich sehe nur den 2. Teil. Den Fehler konnte ich in der character callback ausmachen:
Wenn ich mir die Startwerte in der Konsole ausgeben lasse, dann sehe ich, dass start von 0 bis etwa 2000 gezählt wird und danach wieder bei 0 anfängt. Genau die Wörter die bei 2000 ankommen, haben einen Zeilenumbruch und werden abgeschnitten. Ich weiß nicht genau wieso da bis 2000 gezählt wird, noch was ich dagegen machen kann.
Zur Vollständigkeit der komplette Code:
Die XML-Datei ist folgendermaßen aufgebaut:
ich programmiere gerade einen chinesisch Vokabeltrainer der die Vokabeln aus einer XML-Datei ausliest und in ein JTable speichert. Das funkioniert sehr gut, nur jedes 50. Wort ist abgeschnitten und ich sehe nur den 2. Teil. Den Fehler konnte ich in der character callback ausmachen:
Code:
public void characters(char[] ch, int start, int length) throws SAXException {
tempVal = new String(ch,start,length);
System.out.println("tempVal: "+tempVal+" Start: "+start);
}
Wenn ich mir die Startwerte in der Konsole ausgeben lasse, dann sehe ich, dass start von 0 bis etwa 2000 gezählt wird und danach wieder bei 0 anfängt. Genau die Wörter die bei 2000 ankommen, haben einen Zeilenumbruch und werden abgeschnitten. Ich weiß nicht genau wieso da bis 2000 gezählt wird, noch was ich dagegen machen kann.
Zur Vollständigkeit der komplette Code:
Code:
public void loadDocument(String filepath_){
//get a factory
allWords = new Vector<Word>();
SAXParserFactory spf = SAXParserFactory.newInstance();
try {
//get a new instance of parser
SAXParser sp = spf.newSAXParser();
//parse the file and also register this class for call backs
sp.parse(filepath_, this);
}catch(SAXException se) {
se.printStackTrace();
}catch(ParserConfigurationException pce) {
pce.printStackTrace();
}catch (IOException ie) {
ie.printStackTrace();
}
}
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
tempVal = "";
if(qName.equalsIgnoreCase("Word")) {
tempWord = new Word();
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
tempVal = new String(ch,start,length);
System.out.println("tempVal: "+tempVal+" Start: "+start);
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if(qName.equalsIgnoreCase("Word")) {
//add it to the list
allWords.add(tempWord);
}else if (qName.equalsIgnoreCase("Translation")) {
tempWord.setTranslation(tempVal);
}else if (qName.equalsIgnoreCase("Pinyin")) {
tempWord.setPinyin(tempVal);
}else if (qName.equalsIgnoreCase("Character")) {
tempWord.setCharacter(tempVal);
}else if (qName.equalsIgnoreCase("Knowledge")) {
tempWord.setKnowledge(tempVal);
}
}
Die XML-Datei ist folgendermaßen aufgebaut:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<Vocabulary>
<Word>
<Translation>ausruhen</Translation>
<Pinyin>xiu1</Pinyin>
<Character>休</Character>
<Knowledge>95</Knowledge>
</Word>
<Word>
<Translation>ich</Translation>
<Pinyin>wo3</Pinyin>
<Character>我</Character>
<Knowledge>80</Knowledge>
</Word>
<Word>
<Translation>Ozean</Translation>
<Pinyin>yang2</Pinyin>
<Character>洋</Character>
<Knowledge>85</Knowledge>
</Word>
</Vocabulary>