Nasa Rss feed ошибка разбора Sax

Я пытаюсь написать Java-программу для чтения RSS-канала NASA. Код работает, но когда код встречает символ, он не читает всю строку. Например: "Новое исследование НАСА обнаружило, что последний оставшийся участок ледникового шельфа Ларсена Б Антарктиды, который частично обрушился в 2002 году, быстро ослабевает и, вероятно, полностью распадется до конца десятилетия". В этой строке выше код не читает всю строку после Antartica. В чем проблема с кодом??? Как я могу это исправить??? Без символа & # 039; код работает нормально. Ссылка на канал: " http://www.nasa.gov/rss/dyn/earth.rss"

package xmlparseprac;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class Handler extends DefaultHandler {
boolean mtitle=false;
boolean mdescription=false;
boolean mitem;

@Override
public void startDocument() throws SAXException {
    super.startDocument(); 
    System.out.println("Starting...");
}

@Override
public void endDocument() throws SAXException {
    super.endDocument(); 
    System.out.println("Ending...");
}

@Override
public void startElement(String string, String string1, String string2, Attributes atrbts) throws SAXException {
    super.startElement(string, string1, string2, atrbts); 
    if(string2.equalsIgnoreCase("item")){mitem=true;}
    if(string2.equalsIgnoreCase("title")){mtitle=true;}
    if(string2.equalsIgnoreCase("description")){mdescription=true;}
}

@Override
public void endElement(String string, String string1, String string2) throws SAXException {
    super.endElement(string, string1, string2);
    if(string2.equalsIgnoreCase("item")){mitem=false;}
    if(string2.equalsIgnoreCase("title")){mtitle=false;}
    if(string2.equalsIgnoreCase("description")){mdescription=false;}
}

@Override
public void characters(char[] chars, int i, int i1) throws SAXException {
    super.characters(chars, i, i1);
    if(mtitle==true && mitem==true){
        String s=new String(chars, i, i1);
        System.out.println("Title:"+s);
        mtitle=false;}
    if(mdescription==true && mitem==true){
        String s=new String(chars, i, i1);
        System.out.println("Description:"+s);
        mdescription=false;
    }
}

}

1 ответ

Решение

Я наконец нашел ответ на свой вопрос.

ссылка: " http://www.javaexperience.com/strip-invalid-characters-from-xml/" ссылка: " https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html"

Библиотека apache-lang-StringEscapeUitls commons содержит метод unescapeHtml4 . Он удаляет символы кодирования html, такие как & # 039 и т. Д., С символами s и другими эквивалентными символами. Просто преобразуйте входной поток URL в строку и используйте функцию unescapeHtml14 в строку и извлеките из него входной поток и вызовите функцию анализа с входным потоком в качестве параметра. Спасибо @duffymo за сообщение о "магических персонажах".

Другие вопросы по тегам