我理解SAX解析器的工作方式与XMLPull解析器之间的区别.事实上这里有一个很好的解释:
http://www.firstobject.com/xml-reader-sax-vs-xml-pull-parser.htm 这篇文章有点以.NET为中心,但概念适用.
虽然我同意作者的观点,即Pull解析器更容易使用,但我很困惑哪种类型的解析器在哪种情况下会更好.如果有人可以放弃任何光线并指出我更多的阅读,我会很感激.
谢谢.
我想知道Android中的XML SAX解析器,Pull解析器和DOM解析器之间的区别.在哪种情况下,哪一个在性能和实施方面更好?
感谢名单.Khobaib.
如何使用pull解析器解析assets文件夹中的本地XML文件?我无法让pull解析器工作.它总是抛出一个异常.我想我无法获取文件的路径,或连接到文件.
我正在寻找SAX和Pull Parser之间的主要区别.我知道SAX解析器适合处理大型XML文件,因为它不存储XML并且只在一个方向上遍历.与DOM相比.但我无法找到SAX和PULL之间的主要区别.请建议我任何链接
我想解析RSS提要.我的问题是我如何解析<item>和</item>标签之间的所有标签.
鉴于这个非常简单的XML:
<?xml version="1.0" ?>
<rss version="2.0">
<channel>
<title>MyRSSPage</title>
<link>http://www.example.com</link>
<item>
<link>www.example.com/example1</link>
<title>Example title 1</title>
</item>
<item>
<link>www.example.com/example2</link>
<title>Example title 2</title>
</item>
</channel>
</rss>
Run Code Online (Sandbox Code Playgroud)
我想解析<item>...</item>标签之间的东西.
List<RssMessage> messages = new ArrayList<RssMessage>();
// parser is a XmlPullParser instance
while(parser.next() != XmlPullParser.END_DOCUMENT) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
// START OF HEADER
if(name.equals("title")) {
title = parser.nextText();
}
else if(name.equals("link")) {
link = parser.nextText();
}
else if(name.equals("description")) {
description = parser.nextText(); …Run Code Online (Sandbox Code Playgroud) 假设你有一个像这样的XML文档:
<root>
That was a <b boldness="very">very bold</b> move.
</root>
Run Code Online (Sandbox Code Playgroud)
假设它XmlPullParser位于root的开始标记上.是否有内读取所有文字一个方便的方法root来一个String,有点像innerHtml在DOM?
或者我是否必须自己编写一个实用程序方法来重新创建解析后的标记?这当然对我来说似乎是浪费时间.
String myDesiredString = "That was a <b boldness=\"very\">very bold</b> move."
Run Code Online (Sandbox Code Playgroud) 我有这个XML:
<menu>
<day name="monday">
<meal name="BREAKFAST">
<counter name="Bread">
<dish>
<name>Plain Bagel</name>
</dish>
<counter/>
<meal/>
<day/>
<day name="tuesday">
<meal name="LUNCH">
<counter name="Other">
<dish>
<name>Cheese Bagel</name>
</dish>
<counter/>
<meal/>
<day/>
<menu/>
Run Code Online (Sandbox Code Playgroud)
如果day标签的属性等于星期一,那么现在我正在尝试这样做.然后饭标属性等于BREAKFAST,然后我想得到计数器的属性."面包".
我已经设置了xml pull解析器,但我正在努力获得这个值.这是我尝试过的,我现在看到它不能也不会起作用......所以任何有关如何设置它的帮助都会很棒.
while (eventType != XmlResourceParser.END_DOCUMENT) {
String tagName = xmlData.getName();
switch (eventType) {
case XmlResourceParser.START_TAG:
if (tagName.equalsIgnoreCase("day")) {
if (xmlData.getAttributeValue(null, "name").equalsIgnoreCase(day)) {
if (tagName.equalsIgnoreCase("meal")) {
mealArray.add(xmlData.getAttributeValue(null, "name"));
Log.i(TAG, xmlData.getAttributeValue(null, "name"));
}
}
}
break;
case XmlResourceParser.TEXT:
break;
case XmlPullParser.END_TAG:
break;
}
eventType = xmlData.next();
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Android的XmlPullParser处理OpenStreetMap(.osm)文件.我遇到问题的部分是这样的:
<way id='-13264' action='modify' visible='true'>
<nd ref='-13252' />
<nd ref='-13251' />
<nd ref='-13249' />
</way>
Run Code Online (Sandbox Code Playgroud)
我需要在每个方向节点中使用nd节点,一次一个节点(这是关键),在这些节点之间创建一个精确的特定数据结构.似乎没有方便的方法来获取XmlPullParser中的一个节点的所有子节点,所以我在这些节点上尝试了很多嵌套的if/elseif-stuff,但无法使其工作.有人可以为我提供一些示例代码来处理节点的子节点,但保持类似父节点的子节点是分开的吗?
我正在Android上进行常规的XML解析,很少我得到这个例外,只在特定的手机上.未能找到这个问题的根源.有没有人知道可能导致这种情况的原因是什么?
java.lang.ArrayIndexOutOfBoundsException: src.length=8192 srcPos=1 dst.length=8192 dstPos=0 length=-1
at java.lang.System.arraycopy(Native Method)
at org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1489)
at org.kxml2.io.KXmlParser.skip(KXmlParser.java:1574)
at org.kxml2.io.KXmlParser.parseStartTag(KXmlParser.java:1049)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:369)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
Run Code Online (Sandbox Code Playgroud) 我在Android上使用XmlPullParser但getText返回null.为什么会这样?
代码,注释行给出null
ArrayList<String> titleList = new ArrayList<String>();
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(this.getInputStream(), null);
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equalsIgnoreCase(TITLE)) {
// MainActivity.itemsList.add(xpp.getText());
Log.d("XGamers", "a");
}
}``
eventType = xpp.next();
}
} catch (XmlPullParserException e) {
Log.e("XGamers", "XmlPullParserException in FeedParser");
} catch (IOException e) {
Log.e("XGamers", "IOException in FeedParser");
}
Run Code Online (Sandbox Code Playgroud)