XmlPullParser getAttributeValue 总是 returns null
XmlPullParser getAttributeValue always returns null
我正在尝试解析 xml 文件。但是方法 getAttributeValue
总是 returns null 对我来说。首先是 xml 文件
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
这是我的代码。我正在使用 AsyncTask
public class XmlParser extends AsyncTask<Void, Void, String> {
private XmlPullParserFactory xmlFactoryObject;
private XmlPullParser myParser;
private File file;
FileInputStream fis;
String value;
public XmlParser() {
try {
xmlFactoryObject = XmlPullParserFactory.newInstance();
myParser = xmlFactoryObject.newPullParser();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
public void setFile(File file1) {
file = file1;
execute();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
try {
if(file == null){
Toast.makeText(getActivity(), "NULL", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getActivity(), "NOT NULL " + file.getName(), Toast.LENGTH_LONG).show();
fis = new FileInputStream(file);
myParser.setInput(fis, null);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
@Override
protected String doInBackground(Void... params) {
int event = 0;
try {
event = myParser.getEventType();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
while (event != XmlPullParser.END_DOCUMENT) {
String name=myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
break;
case XmlPullParser.END_TAG:
if(name.equals("from")){
value = myParser.getAttributeValue(null, "value"); // this line always return null
Log.d(getTag(), "NEZINAU " + value);
}
break;
}
try {
event = myParser.next();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
Log.d(getTag(), "BAD " + e.getLocalizedMessage());
}
}
return value;
}
@Override
protected void onPostExecute(String aVoid) {
super.onPostExecute(aVoid);
System.out.println("myEND " + aVoid);
Toast.makeText(getActivity(), "THE END!!! " + value, Toast.LENGTH_LONG).show();
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
此行 value = myParser.getAttributeValue(null, "value"); // this line always return null
始终 returns 为空。为什么?
XML 中的属性如下所示:
<Tag attribute="value">content</Tag>
您的 XML 文档中的标签没有属性。您想使用 xmlPullParser.getText()
获取开始和结束标记之间的文本内容。
您必须在事件 XmlPullParser.TEXT 上使用 XmlPullParser.getText() 检索值。
请参阅此处的示例:
http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
尝试这样的事情:
String currentName = "";
while (event != XmlPullParser.END_DOCUMENT) {
String name=myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
currentName = name;
break;
case XmlPullParser.TEXT:
if("from".equals(currentName)){
value = myParser.getText();
Log.d(getTag(), "NEZINAU " + value);
}
break;
case XmlPullParser.END_TAG:
break;
}
我正在尝试解析 xml 文件。但是方法 getAttributeValue
总是 returns null 对我来说。首先是 xml 文件
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
这是我的代码。我正在使用 AsyncTask
public class XmlParser extends AsyncTask<Void, Void, String> {
private XmlPullParserFactory xmlFactoryObject;
private XmlPullParser myParser;
private File file;
FileInputStream fis;
String value;
public XmlParser() {
try {
xmlFactoryObject = XmlPullParserFactory.newInstance();
myParser = xmlFactoryObject.newPullParser();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
public void setFile(File file1) {
file = file1;
execute();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
try {
if(file == null){
Toast.makeText(getActivity(), "NULL", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getActivity(), "NOT NULL " + file.getName(), Toast.LENGTH_LONG).show();
fis = new FileInputStream(file);
myParser.setInput(fis, null);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
@Override
protected String doInBackground(Void... params) {
int event = 0;
try {
event = myParser.getEventType();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
while (event != XmlPullParser.END_DOCUMENT) {
String name=myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
break;
case XmlPullParser.END_TAG:
if(name.equals("from")){
value = myParser.getAttributeValue(null, "value"); // this line always return null
Log.d(getTag(), "NEZINAU " + value);
}
break;
}
try {
event = myParser.next();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
Log.d(getTag(), "BAD " + e.getLocalizedMessage());
}
}
return value;
}
@Override
protected void onPostExecute(String aVoid) {
super.onPostExecute(aVoid);
System.out.println("myEND " + aVoid);
Toast.makeText(getActivity(), "THE END!!! " + value, Toast.LENGTH_LONG).show();
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
此行 value = myParser.getAttributeValue(null, "value"); // this line always return null
始终 returns 为空。为什么?
XML 中的属性如下所示:
<Tag attribute="value">content</Tag>
您的 XML 文档中的标签没有属性。您想使用 xmlPullParser.getText()
获取开始和结束标记之间的文本内容。
您必须在事件 XmlPullParser.TEXT 上使用 XmlPullParser.getText() 检索值。 请参阅此处的示例: http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
尝试这样的事情:
String currentName = "";
while (event != XmlPullParser.END_DOCUMENT) {
String name=myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
currentName = name;
break;
case XmlPullParser.TEXT:
if("from".equals(currentName)){
value = myParser.getText();
Log.d(getTag(), "NEZINAU " + value);
}
break;
case XmlPullParser.END_TAG:
break;
}