我正在尝试解析rss xml,但仍在解析描述,因为我的程序在遇到时停止解析描述内容(')。
解析xml的代码:
public class RSSAX {
String channel_title="";
public void displayRSS()
{
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("http://www.ronkaplansbaseballbookshelf.com/feed/podcast/", new RSSHandler());
} catch (Exception e) {
// TODO: handle exception
System.out.println("Messge is "+e.getMessage());
}
}
private class RSSHandler extends DefaultHandler
{
private boolean isItem = false;
private String tagName="";
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
this.tagName= qName;
if(qName.equals("item"))
{
this.isItem=true;
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
this.tagName="";
if(qName.equals("item"))
{
System.out.println("========================");
this.isItem=false;
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(this.isItem)
{
//System.out.println("tagname is "+this.tagName);
if(this.tagName.equals("title"))
{
System.out.println("title is "+(new String(ch,start,length)));
this.tagName="";
}
else if(this.tagName.equals("link"))
{
System.out.println("link is "+(new String(ch,start,length)));
this.tagName="";
}
else if(this.tagName.equals("description"))
{
String test=(new String(ch,start,length)).replaceAll("\\<.*?>","");
test=StringEscapeUtils.escapeXml(StringEscapeUtils.unescapeXml(test));
System.out.println("description is "+test);
this.tagName="";
}
else if(this.tagName.equals("comments"))
{
System.out.println("comment link is "+(new String(ch,start,length)));
this.tagName="";
}
else if(this.tagName.equals("pubDate"))
{
System.out.println("pubDate is "+(new String(ch,start,length)));
this.tagName="";
}
else if(this.tagName.equals("category"))
{
System.out.println("Category is "+(new String(ch,start,length)));
this.tagName="";
}
else if(this.tagName.equals("content:encoded"))
{
System.out.println("content:encoded is "+(new String(ch,start,length)));
//this.tagName="";
}
}
}
}
的输出:
标题是The Bookshelf Conversation:Filip Bondy
链接是http://www.ronkaplansbaseballbookshelf.com/2015/08/04/the-bookshelf-conversation-filip-bondy/
pubDate是星期二,2015年8月4日14:31:45 +0000
评论链接为http://www.ronkaplansbaseballbookshelf.com/2015/08/04/the-bookshelf-conversation-filip-bondy/#comments
类别是2015年的标题
类别是作者简介/采访Ron Kaplan
描述是我的新泽西州的地主和经验丰富的体育记者菲利普邦迪在全国消遣史上最着名的游戏之一制作了一个有趣的卷。每当有
当它遇到那里的 ..
答案 0 :(得分:1)
SAX解析器可以按照自己喜欢的方式分解文本节点,并通过对characters()方法的多次调用来传递内容。重新组装这些作品是你的工作。
答案 1 :(得分:0)
您可以使用STAXParser来强制XMLStreamReader返回单个字符串,您可以包含:
factory.setProperty("javax.xml.stream.isCoalescing", true);
这有助于返回一个字符串,请参阅XMLStreamReade.next() Documentation