2010-07-28 1 views
4

В настоящее время я использую SAXParser с SAXParserFactory, и у меня возникла проблема с вырезанием строк при символах '&'. Например: «Нация, созданная нашим миром & все в ней» становится «все в ней».Проблема конкатенации SAXParser '&'

Очевидно, что я не хочу, чтобы это произошло. В xml-вводе символ правильно экранируется как &. Как я могу это решить?

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(); 
} 

У меня есть это в моем классе 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); 
       } 
.... 

ответ

10

SAX-API не гарантирует, что любой текстовый узел будет доставлен в целости и сохранности. Разрешено разбить его на несколько вызовов метода characters(). Ваше приложение должно разместить это, возможно, и собрать сами сборки.

Кстати, Nation Created Our World & everything in it не является допустимым фрагментом текста XML, он должен быть Nation Created Our World & everything in it. В этом случае анализатор SAX может разбивать его на Nation Created Our World, & и everything in it, и ваше приложение запоминает только последнее.

+0

свою ошибку, но это 'Nation создал наш мир & все в нем' в файле XML. Я попробую то, что вы предложили –

+0

спасибо, это сработало –

3

Благодаря skaffman

Реализация,

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); 
}