2010-07-28 13 views
4

Je suis actuellement en utilisant SAXParser avec SAXParserFactory, et j'ai rencontré un problème avec les chaînes étant coupé à '&' symboles. Par exemple: "Nation a créé notre monde &" tout devient "tout".SAXParser '&' problème de concaténation

Évidemment, je ne veux pas que cela arrive. Dans l'entrée xml, le caractère est correctement échappé sous la forme &. Comment puis-je résoudre ça?

try{ 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 

      /* Get the XMLReader of the SAXParser we created. */ 
      XMLReader r = sp.getXMLReader(); 

      //This handles the xml and populates the entries array 
      XMLHandler handler = new XMLHandler(); 


      // register event handlers 
      r.setContentHandler(handler); 
      String url = "http://foobar.xml"; 
      r.parse(url); 

      return handler.getEntries(); 
} 

J'ai dans ma classe DefaultHandler

.... 
    public void characters(char ch[], int start, int length){ 
      String value = new String(ch , start , length); 

      if(!value.trim().equals("")) { 

       if(currentElement.equalsIgnoreCase("TITLE")) { 
        tempEntry.setTitle(value); 
       } 
.... 

Répondre

10

L'API SAX ne garantit pas que tout noeud texte donné sera livré en une seule pièce. Il est permis de le diviser en plusieurs appels à la méthode characters(). Votre application doit s'adapter à cela et réassembler les pièces elles-mêmes. Incidemment, Nation Created Our World & everything in it n'est pas un fragment de texte XML valide, il doit être Nation Created Our World & everything in it. Dans ce cas, l'analyseur syntaxique SAX peut être divisé en Nation Created Our World, & et everything in it, et votre application ne se souvient que du dernier.

+0

mon erreur, mais il est «Nation créé notre monde tout en & ce dans le fichier XML. Je vais essayer ce que vous avez suggéré –

+0

merci, cela a fonctionné –

3

Merci skaffman

mise en œuvre,

public void startElement(String s, String s1, String elementName, Attributes attributes) throws SAXException { 
    // clear tmpValue on start of element 
    tmpValue = ""; 
} 

public void characters(char[] ac, int i, int j) throws SAXException { 
    tmpValue += new String(ac, i, j); 
}