bro*_*oli 21 parsing android sax escaping
我已经创建了自己的DefaultHandler来解析rss提要,并且对于大多数提要它工作正常,但是,对于ESPN,由于ESPN格式化网址的方式,它正在切断部分文章网址.来自ESPN的完整文章网址的一个例子..
http://sports.espn.go.com/nba/news/story?id=5189101&campaign=rss&source=ESPNHeadlines
Run Code Online (Sandbox Code Playgroud)
问题是由于某种原因,DefaultHandler字符方法只从包含上述url的标记中获取.
http://sports.espn.go.com/nba/news/story?id=5189101
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它正在从&符号转义码和之后的网址中删除所有内容.如何让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());
}
}
Run Code Online (Sandbox Code Playgroud)
罗布
Com*_*are 46
正如你所看到的,它正在从&符号转义码和之后的网址中删除所有内容.
从文档中的characters()方法:
解析器将调用此方法来报告每个字符数据块.SAX解析器可以在一个块中返回所有连续的字符数据,或者它们可以将它分成几个块; 但是,任何单个事件中的所有字符都必须来自同一个外部实体,以便Locator提供有用的信息.
当我编写SAX解析器时,我使用a 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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后endElement(),我把它的内容StringBuilder和它做了一些事情.这样,如果解析器characters()多次调用,我不会错过任何东西.
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
所以我想通了,上面的代码是解决方案.
| 归档时间: |
|
| 查看次数: |
10710 次 |
| 最近记录: |