Android SAX 解析器没有从标签之间获取全文

标签 android parsing escaping sax

我创建了自己的 DefaultHandler 来解析 rss 提要,并且对于大多数提要来说它工作正常,但是,对于 ESPN,由于 ESPN 格式化它的 url 的方式,它正在切断部分文章 url。来自 ESPN 的完整文章 URL 示例。

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

如您所见,它从 & 转义码和之后的 URL 中删除了所有内容。我怎样才能让 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());
  }
 }

罗伯·W.

最佳答案

As you can see, it's cutting everything off the url from the ampersand escape code and after.

来自 documentation characters() 方法:

The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information.

当我编写 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(),我不会错过任何内容。

关于Android SAX 解析器没有从标签之间获取全文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838099/

相关文章:

android - 错误 : Error: String types not allowed (at 'entries' with value 'array/list' )

C++语言符号分隔符

c - 如何转义c中popen()函数中使用的命令中的特殊字符?

android - 通过 WebSocket 传输音频文件

java - 获取 httpURLConnection 的 java.io.FileNotFoundException

java - 拆分文件中的信息并读取它们

java - 在正则表达式 :java 中获取非法字符范围

php - 使用单引号时在 PHP 中创建制表符和换行符的正确方法是什么?

android - 近场通信。扫描 NDEF 消息时启动 Activity

java - 如何用正则表达式解析字符串?