2012-04-14 8 views
1

Irgendeine Idee, was mache ich hier falsch.SAX Parser Newline

Dies ist die XML-Datei

<text xml:space="preserve">{{Redirect|Anarchist|the fictional character|Anarchist (comics)}} 
{{Redirect|Anarchists}} 
{{Anarchism sidebar}} 
{{Libertarianism sidebar}} 
</text> 

Nun, wenn ich es mit Hilfe von SAX-Parser bin Parsen, zB für diese Methode meiner Charaktere

public void characters (char ch[], int start, int length) throws SAXException{ 

    System.out.println(text); 
    if (text){ 
     System.out.println(testData); //testData is StringBuilder 
     if (testData != null){ 
      for (int j=start; j < (start + length); j++){ 
       testData.append(ch[j]); 
      } 
     }       
    } 
    text = false 
} 

Das ist meine Startelement-Methode

ist
public void startElement(String uri, String localname, String qName, Attributes attributes) throws SAXException { 
    if (qName.equalsIgnoreCase("text")) { 
     text = true; 
    } 
} 

aber meine Zeichen Funktion wird nur einmal aufgerufen. Ich dachte, es würde mehrere Male aufgerufen werden und dann könnte ich die

+1

Angesichts der Code, den Sie bereitgestellt haben, bin ich überrascht, dass die 'Zeichen'-Funktion auch nur einmal aufgerufen wird. Ich sehe keinen Code, der die Funktion 'characters' aufruft ... – Kiril

+0

Ihr Code wird nicht einmal kompiliert. Bitte beheben Sie es, bearbeiten Sie dann Ihre Frage und geben Sie den richtigen Code ein. Außerdem hat die Formatierung den Code sehr unübersichtlich gemacht, was vermutlich die Ursache Ihres Problems ist. –

+0

Jungs, ich habe gerade 2 Methoden des SAX-Parsers erwähnt. Die anderen Methoden sind startElement und endElement. Die Methode characters wird aufgerufen, wenn wir den Flag-Text in der startElement-Methode auf true setzen. Der Code ist in Ordnung. Nur dass es liest, {{Redirect | Anarchist | der fiktive Charakter | Anarchist (Comics)}} {{Redirect | Anarchists}} der XML-Datei und nicht den gesamten Text – Gaurav

Antwort

0

Flag "Ignorieren Leerzeichen" steuert, ob der XML-Parser Leerzeichen zwischen XML-Elementen als signifikant oder ob es ignoriert werden soll. Solange Sie ignoreWhitespace nicht gesetzt haben, ist der Parser korrekt, wenn er alle Zeichen - Leerzeichen oder nicht - in die Methode characters() eingibt.

+0

Tipps, wie Sie dieses Flag implementieren – Gaurav

+1

Durch die Einstellung das Feature "http://apache.org/xml/features/dom/include-ignorable-whitespace". Siehe [Xerces2 Parser-Funktionen] (http://xerces.apache.org/xerces2-j/features.html). Aber das wird nur von Xerces2 unterstützt. Momentan weiß ich nichts über ein allgemeines SAX Parser Feature "ignorable-whitespace". – andih

+0

Ich lese in diesem Blog http://p2p.wrox.com/xml/41965-sax-ignorewhitespace-method-usage.html wobei er erwähnt, die Zeichenmethode erneut aus der ignableablewhitespace Zeichenfunktion aufzurufen. public void ignorableWhitespace (Zeichen buf [], int start, int Länge) löst SAXException aus {Zeichen (buf, start, length); } Aber es scheint nicht zu funktionieren. Ich habe sogar versucht, die println-Anweisung zu setzen, um zu prüfen, ob sie aufgerufen wird, aber ich glaube nicht, dass das passiert ist. Denkst du, whitespace und/n werden ähnlich gehandhabt, weil ich glaube, dass eine neue Zeile angetroffen wird – Gaurav