Android新手免责声明:我是Android新手,请放轻松我。
我正在试图理解Android's Parsing XML Data示例,特别是他们对parser.require()的使用 - 在“阅读Feed”标题下拉我的头发。
是的,我看过the documentation for XmlPullParser。我一定是个白痴,因为我无法理解它。
我也在这些SO论坛上挖掘并且没有成功找到我可以亲自解析的答案: - )
好的,如果不满足传入的参数,它会引发异常。当它似乎仅适用于单个元素时,它如何帮助我?
我怎么知道要传递给方法的参数?
总是有必要吗?或者有时候?为什么呢?
每当我解析XML时,我应该使用此方法吗?哪里?为什么呢?
他们的示例似乎是在XML Feed的开头处解决了“feed”标记,但它们似乎没有立即解决“title”标记。为什么他们会断言“feed”标签而不是下面的“title”标签?
天啊,我很困惑。
我对Android开发的挫败感越来越无法衡量,这个小问题就是让我超越边缘。如果有人能用简单的语言向我解释为什么要使用.require()方法,并且在适当的时候,我将永远感激。
我没有自己的示例代码在这里发布,因为我正在做的就是阅读并尝试理解示例代码。
提前感谢所有试图帮助我的人。
答案 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 documentation,parser.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_TAG
,TEXT
,END_TAG
或END_DOCUMENT
。然后,您的逻辑可以根据您的需要处理每个事件及其值。