如何/何时使用XmlPullParser.require()方法

时间:2016-08-24 18:17:33

标签: android xmlpullparser

Android新手免责声明:我是Android新手,请放轻松我。

我正在试图理解Android's Parsing XML Data示例,特别是他们对parser.require()的使用 - 在“阅读Feed”标题下拉我的头发。

是的,我看过the documentation for XmlPullParser。我一定是个白痴,因为我无法理解它。

我也在这些SO论坛上挖掘并且没有成功找到我可以亲自解析的答案: - )

好的,如果不满足传入的参数,它会引发异常。当它似乎仅适用于单个元素时,它如何帮助我?

我怎么知道要传递给方法的参数?

总是有必要吗?或者有时候?为什么呢?

每当我解析XML时,我应该使用此方法吗?哪里?为什么呢?

他们的示例似乎是在XML Feed的开头处解决了“feed”标记,但它们似乎没有立即解决“title”标记。为什么他们会断言“feed”标签而不是下面的“title”标签?

天啊,我很困惑。

我对Android开发的挫败感越来越无法衡量,这个小问题就是让我超越边缘。如果有人能用简单的语言向我解释为什么要使用.require()方法,并且在适当的时候,我将永远感激。

我没有自己的示例代码在这里发布,因为我正在做的就是阅读并尝试理解示例代码。

提前感谢所有试图帮助我的人。

2 个答案:

答案 0 :(得分:0)

发布此问题后,我想我已经知道.require()的工作原理。从developers.android.com获取以下代码段:

parser.require(XmlPullParser.START_TAG, ns, "feed");
while (parser.next() != XmlPullParser.END_TAG) {
    if (parser.getEventType() != XmlPullParser.START_TAG) {
        continue;
    }
    String name = parser.getName();
    // Starts by looking for the entry tag
    if (name.equals("entry")) {
        entries.add(readEntry(parser));
    } else {
        skip(parser);
    }
}

...我从中得到的是,通过使用.require(),我们将光标设置为“feed”元素的START_TAG - 顶级元素 - 然后我们可以放入循环,直到我们最终命中我们最初排队的feed元素的END_TAG

因此,.require()不仅验证了xml元素的入口点,而且还通知解析器您输入了哪个元素,因此您可以迭代它直到您点击该特定元素的结束标记。

比我给予的信任更容易理解 - 抱歉最初的发帖!

答案 1 :(得分:0)

Android's documentationparser.require()方法使用此签名:

require(int type, String namespace, String name)

...在您指定的事件类型(name)中,在已声明的命名空间(namespace)中将解析器排队到命名元素(type)。这是一个简单的XML片段,可以帮助您实现可视化:

<foo>Hello World!</foo>

parser.require( XmlPullParser.START_TAG, ns, "foo" )最初会将光标排到foo元素的开始标记:<foo>

parser.require( XmlPullParser.TEXT, ns, "foo" )最初会将光标排到foo元素中的文本:"Hello World!"

parser.require( XmlPullParser.END_TAG, ns, "foo" )最初会将光标排到foo元素的结束标记:</foo>

无论您将光标放在带有parser.require()的文档中的哪个位置,都可以根据需要使用parser.next()迭代尽可能多的文档。

在您进行迭代时,您可以检查每个“事件”以确定其类型:START_TAGTEXTEND_TAGEND_DOCUMENT。然后,您的逻辑可以根据您的需要处理每个事件及其值。