3

我想在从 XML 提要导入我的文章时制作一个进度条。

解析工作正常,但对于我的进度条,我需要快速知道<item>提要中的总#数,以便确定已加载的百分比。

我的想法是,在 PHP 中执行此操作并将“计数”添加到提要本身会快得多 - 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<channel>
<title>My Apps Feed</title>
<link>http://link_to_this_fiel</link>
<language>en-us</language>
<count>42</count>

但随后我需要能够快速访问该“计数”数字。

目前,我有一个RSSHandler.java这样的名称:

//Add all items from the parsed XML
for(NewsItem item : parser.getParsedItems())
{
    //...

注意:我的应用的最低 API 级别 8

4

2 回答 2

0

您可以使用 Xpath 来获取 XML 中的特定节点值。样本将是:

SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(.....); // get document for your xml here
Element elem = (Element) XPath.selectSingleNode(doc, "channel/count");
System.out.println(elem.getValue());

这样就可以直接获取计数值。但我不确定这是实现此目的的有效且更快的方法。作为一个选项,您可以使用它。还要花一些时间阅读:SAX parsing - effective way to get text nodes

于 2013-01-22T04:56:37.493 回答
0

SAX 按照它们进入的顺序读取标签。确保将您的标签放在 XML 的开头,否则无论如何您都需要解析它。为了更容易解析,我将其放入具有唯一名称的自闭合标签的属性中。然后等待 SAX 解析器调用您的startElement方法,检查标记名称是否与计数标记的名称匹配,提取属性并将其显示给用户。

如果要在显示计数后停止解析器,可以抛出 aSAXException来执行此操作。

我假设您已经知道如何在主线程之外进行解析工作,因为您提到了一个进度条并暗示解析可能需要一些时间(并且在主线程上执行长任务会给您带来 ANR)。万一有人偶然发现了这个不知道的问题:您可以使用AsyncTaskand publishProgress(在“worker”线程中由您的代码调用) 和onProgressUpdate(在您调用时由 Android 在 UI 线程上调用publishProgress) 方法来解决这个问题。

于 2013-01-28T02:05:33.620 回答