Android, парсинг XML, как игнорировать теги HTML? - PullRequest
1 голос
/ 12 марта 2012

В моем проекте мне нужно разобрать XML.некоторые элементы в XML имеют теги HTML.Я пытался удалить эти теги, но мне не удалось.Код в действии:

private NewsFeedItemList parseNewsContent() {
        NewsParserHandler newsParserHandler = null;

        Log.i("NewsList", "Starting to parse XML...");

        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();
            XMLReader xr = parser.getXMLReader();
            newsParserHandler = new NewsParserHandler();
            xr.setContentHandler(newsParserHandler);

            ByteArrayInputStream is = new ByteArrayInputStream(strServerResponseMsg.getBytes());
            xr.parse(new InputSource(is));

        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        NewsFeedItemList itemList = newsParserHandler.getNewsList();
//      checkLog(itemList);

        Log.i("NewsList", "Parsing XML finished. Sending result back to caller...");
        return itemList;
    }

"strServerResponseMsg" включает информацию XML (http://www.mania.com.my/rss/ManiaTopStoriesFeedFull.aspx?catid=146)

Я могу проанализировать все элементы, но те, у кого есть тег html, не будут анализироваться полностью.

это мой обработчик синтаксического анализатора:

public class NewsParserHandler extends DefaultHandler {

    private NewsFeedItemList newsFeedItemList;  
    private boolean current = false;  
    private String currentValue = null;

   /* Because the feed has another "Title", "link" and "pubdate" name in root, 
    * we need to don't let to be stored in arrays. Therefore, we ignore all of 
    * them by incrementing count.*/
    private int count = 0; 


    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);

        if(current)  {  
            currentValue = new String(ch, start, length); 

            if(currentValue==null || currentValue=="" || currentValue==" ")
                currentValue = "-";

            current = false;  
        }
    }

    @Override
    public void startDocument() throws SAXException {
        super.startDocument();

        newsFeedItemList = new NewsFeedItemList();
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);

        current = true;
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);

        current = false;

        if(localName.equals("title"))  {  
            if(count >= 1)
                newsFeedItemList.setTitle(currentValue);  
        }
        if(localName.equals("description"))  {  
            newsFeedItemList.setDescription(currentValue);  
        } 
        if(localName.equals("fullbody"))  {  
            newsFeedItemList.setFullbody(currentValue);  
        } 
        if(localName.equals("link"))  {  
            if(count >= 4)
                newsFeedItemList.setLink(currentValue);  
        } 
        if(localName.equals("pubDate"))  {  
            if(count >= 5)
                newsFeedItemList.setPubDate(currentValue);  
        } 
        if(localName.equals("image"))  {  
            newsFeedItemList.setImage(currentValue);  
        } 

        count++;
    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
    }   


    public NewsFeedItemList getNewsList() {
        return newsFeedItemList;
    }

}

Я пытался добавить currentValue = Html.fromHtml(currentValue).toString(); в метод characters (), но ничего не помогало. Также перед отправкой "strServerResponseMsg" я пытался изменить его наHTML, но синтаксический анализатор ничего не анализировал.

Я нашел эти темы, но их решения для меня не сработали: Как удалить или скрыть HTML-теги в Android Показать строку в формате HTML

Я очень ценю, если вы можете мне помочь. Спасибо.

1 Ответ

0 голосов
/ 12 марта 2012

Используйте метод ниже, чтобы удалить все HTML-теги из переменной currentValue.

public static String removeHtmlTag(String htmlString) {
        return htmlString.replaceAll("\\<.*?\\>", "").trim();
}
...