В моем проекте мне нужно разобрать 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
Я очень ценю, если вы можете мне помочь. Спасибо.