How/when 使用 XmlPullParser.require() 方法
How/when to use XmlPullParser.require() method
Android新手免责声明:我是Android新手,请放轻松。
我正在努力理解 Android's Parsing XML Data 示例,特别是他们对 parser.require() 的用法 - 在 "Read the Feed".
标题下
是的,我读过 the documentation for XmlPullParser。我一定是个白痴,因为我无法理解它。
我也在这些 SO 论坛上搜索过,但没有成功找到我可以亲自解析的答案:-)
好的,所以如果不满足传入的参数,它会抛出异常。当它似乎只应用于单个元素时,它对我有何帮助?
我怎么知道要将哪些参数传递给方法?
总是有必要吗?还是只是偶尔?为什么?
我是否应该在解析 XML 时使用此方法?在哪里?为什么?
他们的示例似乎在 XML 提要的开头处理 "feed" 标记,但他们似乎没有处理紧随其后的 "title" 标记。为什么他们会断言 "feed" 标签而不是下面的 "title" 标签?
我的天啊,我很困惑。
我对为 Android 开发的挫败感越来越大,这个小问题即将让我崩溃。如果有人能简单地向我解释为什么使用 .require() 方法,以及在适当的时候,我将永远感激不已。
我在这里 post 没有自己的示例代码,因为我所做的只是阅读并试图理解示例代码。
提前感谢所有试图帮助我的人。
在 post 提出这个问题后,我想我明白了 .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 - 顶级元素- 然后我们可以进入一个循环,直到我们最终命中我们最初排队的提要元素的 END_TAG !
因此,.require() 不仅验证 xml 元素的入口点,而且还通知解析器您正在输入哪个元素,以便您可以遍历它直到您点击结束该特定元素的标签。
比我认为的更容易理解 - 对于最初的抱怨 post!
根据 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()
遍历文档。
在迭代时,您可以检查每个 "event" 以确定它是什么类型:START_TAG
、TEXT
、END_TAG
或 END_DOCUMENT
.然后,您的逻辑可以根据您的需要处理每个事件及其值。
Android新手免责声明:我是Android新手,请放轻松。
我正在努力理解 Android's Parsing XML Data 示例,特别是他们对 parser.require() 的用法 - 在 "Read the Feed".
标题下是的,我读过 the documentation for XmlPullParser。我一定是个白痴,因为我无法理解它。
我也在这些 SO 论坛上搜索过,但没有成功找到我可以亲自解析的答案:-)
好的,所以如果不满足传入的参数,它会抛出异常。当它似乎只应用于单个元素时,它对我有何帮助?
我怎么知道要将哪些参数传递给方法?
总是有必要吗?还是只是偶尔?为什么?
我是否应该在解析 XML 时使用此方法?在哪里?为什么?
他们的示例似乎在 XML 提要的开头处理 "feed" 标记,但他们似乎没有处理紧随其后的 "title" 标记。为什么他们会断言 "feed" 标签而不是下面的 "title" 标签?
我的天啊,我很困惑。
我对为 Android 开发的挫败感越来越大,这个小问题即将让我崩溃。如果有人能简单地向我解释为什么使用 .require() 方法,以及在适当的时候,我将永远感激不已。
我在这里 post 没有自己的示例代码,因为我所做的只是阅读并试图理解示例代码。
提前感谢所有试图帮助我的人。
在 post 提出这个问题后,我想我明白了 .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 - 顶级元素- 然后我们可以进入一个循环,直到我们最终命中我们最初排队的提要元素的 END_TAG !
因此,.require() 不仅验证 xml 元素的入口点,而且还通知解析器您正在输入哪个元素,以便您可以遍历它直到您点击结束该特定元素的标签。
比我认为的更容易理解 - 对于最初的抱怨 post!
根据 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()
遍历文档。
在迭代时,您可以检查每个 "event" 以确定它是什么类型:START_TAG
、TEXT
、END_TAG
或 END_DOCUMENT
.然后,您的逻辑可以根据您的需要处理每个事件及其值。