SAXParser '&' проблема конкатенации - PullRequest
5 голосов
/ 28 июля 2010

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

Очевидно, я не хочу, чтобы это произошло.Во вводе 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);
               }
....

Ответы [ 2 ]

11 голосов
/ 28 июля 2010

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, а ваше приложение запоминает только последний.

3 голосов
/ 09 августа 2013

Спасибо скаффман

Осуществление

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