我已经创建了自己的DefaultHandler来解析rss提要,对于大多数提要它工作正常,但是,对于ESPN,由于ESPN格式化网址的方式,它正在切断部分文章网址。来自ESPN的完整文章网址的一个例子..
http://sports.espn.go.com/nba/news/story?id=5189101&campaign=rss&source=ESPNHeadlines
问题是出于某种原因,DefaultHandler字符方法只从包含上述URL的标记中获取。
http://sports.espn.go.com/nba/news/story?id=5189101
正如你所看到的,它正在从&符号转义码中删除网址上的所有内容。如何让SAX解析器不在此转义码中删除我的字符串?对于参考这是我的角色方法..
public void characters(char ch[], int start, int length) {
String chars = (new String(ch).substring(start, start + length));
try {
// If not in item, then title/link refers to feed
if (!inItem) {
if (inTitle)
currentFeed.title = chars;
} else {
if (inLink)
currentArticle.url = new URL(chars);
if (inTitle)
currentArticle.title = chars;
if (inDescription)
currentArticle.description = chars;
if (inPubDate)
currentArticle.pubDate = chars;
if (inEnclosure) {
}
}
} catch (MalformedURLException e) {
Log.e("RSSReader", e.toString());
}
}
Rob W。
答案 0 :(得分:46)
正如你所看到的,它正在削减 一切都离开了网址 &符号转义码和之后。
来自characters()
方法的documentation:
Parser会调用此方法 报告每个字符数据块。 SAX解析器可能会返回所有连续的 单个块中的字符数据,或 他们可能把它分成几个块; 但是,任何人物中的所有人物 单一事件必须来自同一事件 外部实体使定位器 提供有用的信息。
当我编写SAX解析器时,我使用StringBuilder
附加传递给characters()
的所有内容:
public void characters (char ch[], int start, int length) {
if (buf!=null) {
for (int i=start; i<start+length; i++) {
buf.append(ch[i]);
}
}
}
然后在endElement()
中,我获取StringBuilder
的内容并对其执行某些操作。这样,如果解析器多次调用characters()
,我就不会错过任何内容。
答案 1 :(得分:6)
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
sb=new StringBuilder();
if(localName.equals("icon"))
{
iconflag=true;
}
}
@Override
public void characters (char ch[], int start, int length) {
if (sb!=null && iconflag == true) {
for (int i=start; i<start+length; i++) {
sb.append(ch[i]);
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
if(iconflag)
{
info.setIcon(sb.toString().trim());
iconflag=false;
}
}
所以我想通了,上面的代码是解决方案。
答案 2 :(得分:0)
前几天我遇到了这个问题,事实证明原因是如果值中包含以下任何字符,则多次调用CHaracters方法:
True
还要注意值内的换行符/换行符!!! 如果xml在没有您的控制的情况下被换行,则还会为该语句中的每一行调用character方法,此外它将返回换行符! (您需要手动依次删除)。
一个处理所有这些问题的示例处理程序是这样的:
" "
' '
< <
> >
& &
我希望这会有所帮助。