Android - XMLPullParser 未解析整个文件
Android - XMLPullParser not parsing entire file
我是初学者,在从网站解析 XML 时遇到很多困难。
下载到文件后,XML 的解析代码如下:
public RSSFeed readFile() throws FileNotFoundException {
RSSFeed feed = new RSSFeed();
RSSLocation location = new RSSLocation();
RSSTime time = new RSSTime();
XmlPullParser parser = Xml.newPullParser();
InputStream inputStream = context.openFileInput(FILENAME);
try {
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
parser.setInput(inputStream,null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_TAG){
// yweather:forecast - forecast is name of the element, yweather is namespace
Log.d("Parser Name", parser.getName());
Log.d("Parser Text", parser.getText());
Log.d("Parser Desc", parser.getPositionDescription());
}
eventType = parser.next();
}
} catch (Exception e) {
Log.e("XML Parser", e.toString());
}
return feed;
}
我只是想看看数据是如何被解析的,这样我就可以适当地分配对象及其属性。
我只想在日志中查看基于每个方法(getName()、getText()、getAttributeValue()...)return编辑的内容
但是,当我使用上面的代码将信息发送到日志时,它只获取第一个标签 <weatherdata>
和 returning 一个 NullPointerException:println 需要文本的消息.
这里是 logcat:
12-06 14:52:30.009 17507-17557/com.example.shortn1.whattowear E/XML Parser: java.lang.NullPointerException: println needs a message
12-06 14:52:30.049 17507-17507/com.example.shortn1.whattowear D/Weather Feed: Feed displayed
12-06 14:52:50.849 17507-17554/com.example.shortn1.whattowear D/Parser Name: weatherdata
12-06 14:52:50.849 17507-17554/com.example.shortn1.whattowear E/XML Parser: java.lang.NullPointerException: println needs a message
12-06 14:52:50.889 17507-17507/com.example.shortn1.whattowear D/Weather Feed: Feed displayed
12-06 14:53:10.874 17507-17856/com.example.shortn1.whattowear D/Parser Name: weatherdata
12-06 14:53:10.874 17507-17856/com.example.shortn1.whattowear E/XML Parser: java.lang.NullPointerException: println needs a message
12-06 14:53:10.919 17507-17507/com.example.shortn1.whattowear D/Weather Feed: Feed displayed
12-06 14:53:30.809 17507-17557/com.example.shortn1.whattowear D/Parser Name: weatherdata
12-06 14:53:30.809 17507-17557/com.example.shortn1.whattowear E/XML Parser: java.lang.NullPointerException: println needs a message
12-06 14:53:30.839 17507-17507/com.example.shortn1.whattowear D/Weather Feed: Feed displayed
我的主要activity太长到post这里,但是有一个位置查找器,在onLocationChanged()中调用方法下载对应的人的xml地点。一旦文件被 returned,readFile()
方法就会被调用。读取完文件后,又调用了另一个方法(就是logging "Feed displayed")。
我还尝试通过添加 && parser.getName().equals("name")
更改 XML 解析器以仅从 XML 中获取 "name" 字段,但它仍然只读取单词 'name' 而不是 return 名称的值。
有什么建议吗?感谢所有帮助!先谢谢了。
您得到的错误与 Log.d
有关,它的两个参数必须不同于 null
并且非空。似乎 parser.getText()
返回 null
导致 Exception
和 while
循环结束(这就是它只输出第一个标签的原因)。
尝试这样做:
String name = parser.getName();
String text = parser.getText();
String positionDescription = parser.getPositionDescription();
Log.d("Parser Name", name != null && !name.equals("") ? name : "---");
Log.d("Parser Text", text != null && !text.equals("") ? text : "---");
Log.d("Parser Desc", positionDescription != null && !positionDescription.equals("") ? positionDescription : "---");
这应该输出文档的其余部分,每次解析器方法之一 returns null
或为空时,输出将是 ---
.
编辑
要获取标签内的文本,您必须将代码更改为:
while (eventType != XmlPullParser.END_DOCUMENT)
{
if(eventType == XmlPullParser.START_TAG)
{
String name = parser.getName();
String positionDescription = parser.getPositionDescription();
Log.d("Parser Name", name != null && !name.equals("") ? name : "---");
}
else if(eventType == XmlPullParser.TEXT)
{
String text = parser.getText();
Log.d("Parser Text", text != null && !text.equals("") ? text : "---");
}
eventType = parser.next();
}
我是初学者,在从网站解析 XML 时遇到很多困难。
下载到文件后,XML 的解析代码如下:
public RSSFeed readFile() throws FileNotFoundException {
RSSFeed feed = new RSSFeed();
RSSLocation location = new RSSLocation();
RSSTime time = new RSSTime();
XmlPullParser parser = Xml.newPullParser();
InputStream inputStream = context.openFileInput(FILENAME);
try {
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
parser.setInput(inputStream,null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_TAG){
// yweather:forecast - forecast is name of the element, yweather is namespace
Log.d("Parser Name", parser.getName());
Log.d("Parser Text", parser.getText());
Log.d("Parser Desc", parser.getPositionDescription());
}
eventType = parser.next();
}
} catch (Exception e) {
Log.e("XML Parser", e.toString());
}
return feed;
}
我只是想看看数据是如何被解析的,这样我就可以适当地分配对象及其属性。
我只想在日志中查看基于每个方法(getName()、getText()、getAttributeValue()...)return编辑的内容
但是,当我使用上面的代码将信息发送到日志时,它只获取第一个标签 <weatherdata>
和 returning 一个 NullPointerException:println 需要文本的消息.
这里是 logcat:
12-06 14:52:30.009 17507-17557/com.example.shortn1.whattowear E/XML Parser: java.lang.NullPointerException: println needs a message
12-06 14:52:30.049 17507-17507/com.example.shortn1.whattowear D/Weather Feed: Feed displayed
12-06 14:52:50.849 17507-17554/com.example.shortn1.whattowear D/Parser Name: weatherdata
12-06 14:52:50.849 17507-17554/com.example.shortn1.whattowear E/XML Parser: java.lang.NullPointerException: println needs a message
12-06 14:52:50.889 17507-17507/com.example.shortn1.whattowear D/Weather Feed: Feed displayed
12-06 14:53:10.874 17507-17856/com.example.shortn1.whattowear D/Parser Name: weatherdata
12-06 14:53:10.874 17507-17856/com.example.shortn1.whattowear E/XML Parser: java.lang.NullPointerException: println needs a message
12-06 14:53:10.919 17507-17507/com.example.shortn1.whattowear D/Weather Feed: Feed displayed
12-06 14:53:30.809 17507-17557/com.example.shortn1.whattowear D/Parser Name: weatherdata
12-06 14:53:30.809 17507-17557/com.example.shortn1.whattowear E/XML Parser: java.lang.NullPointerException: println needs a message
12-06 14:53:30.839 17507-17507/com.example.shortn1.whattowear D/Weather Feed: Feed displayed
我的主要activity太长到post这里,但是有一个位置查找器,在onLocationChanged()中调用方法下载对应的人的xml地点。一旦文件被 returned,readFile()
方法就会被调用。读取完文件后,又调用了另一个方法(就是logging "Feed displayed")。
我还尝试通过添加 && parser.getName().equals("name")
更改 XML 解析器以仅从 XML 中获取 "name" 字段,但它仍然只读取单词 'name' 而不是 return 名称的值。
有什么建议吗?感谢所有帮助!先谢谢了。
您得到的错误与 Log.d
有关,它的两个参数必须不同于 null
并且非空。似乎 parser.getText()
返回 null
导致 Exception
和 while
循环结束(这就是它只输出第一个标签的原因)。
尝试这样做:
String name = parser.getName();
String text = parser.getText();
String positionDescription = parser.getPositionDescription();
Log.d("Parser Name", name != null && !name.equals("") ? name : "---");
Log.d("Parser Text", text != null && !text.equals("") ? text : "---");
Log.d("Parser Desc", positionDescription != null && !positionDescription.equals("") ? positionDescription : "---");
这应该输出文档的其余部分,每次解析器方法之一 returns null
或为空时,输出将是 ---
.
编辑
要获取标签内的文本,您必须将代码更改为:
while (eventType != XmlPullParser.END_DOCUMENT)
{
if(eventType == XmlPullParser.START_TAG)
{
String name = parser.getName();
String positionDescription = parser.getPositionDescription();
Log.d("Parser Name", name != null && !name.equals("") ? name : "---");
}
else if(eventType == XmlPullParser.TEXT)
{
String text = parser.getText();
Log.d("Parser Text", text != null && !text.equals("") ? text : "---");
}
eventType = parser.next();
}