如何在 android 中使用 XMLpullparser 解析具有相同名称的嵌套标签
How to parse Nested tag with same name using XMLpullparser in android
我只想使用 XMLpullparser 解析项目部分中的标题和 link 标签。我如何通过忽略以前的标题和 link 标签来解析它?
<channel>
<title>AAA</title>
<link>linkone</link>
<item>
<title>BBB</title>
<link>link2</link>
</item>
</channel>
我目前使用的解析器如下。如何忽略起始标题和 link 标签?
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
FileInputStream fis = ctx.openFileInput("StackSites.xml");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
xpp.setInput(reader);
int eventtype = xpp.getEventType();
while (eventtype != XmlPullParser.END_DOCUMENT){
String tagname = xpp.getName();
switch (eventtype){
case XmlPullParser.START_TAG:
if(tagname.equalsIgnoreCase("item")){
curStackSite = new StackSite();
}
break;
case XmlPullParser.TEXT:
curText = xpp.getText();
break;
case XmlPullParser.END_TAG:
if(tagname.equalsIgnoreCase("item")){
stackSites.add(curStackSite);
}
if(tagname.equalsIgnoreCase("title")){
curStackSite.setName(curText);
}
if(tagname.equalsIgnoreCase("link")){
curStackSite.setLink(curText);
}
break;
default:
break;
}
eventtype = xpp.next();
}
我不知道这样做的正确方法,但我所做的是在案例中 XmlPullParser.START_TAG:如果找到项目标签,我将计数器设置为 1。如果 XmlPullParser.END_TAG:如果计数器!= 0,那么只有它会增加对象的价值。这个方法有效。如果有人知道更准确的方法,请post。谢谢。
有一个库可用于解析 xml 对 POJO class 的响应。
https://github.com/stanfy/gson-xml
使用本库,您无需手动解析。您需要根据您的 xml.
创建 POJO class
对于给定的xml,你需要创建两个POJO classes
Channel.java
public class Channel {
Item item;
}
Item.java
public class Item {
String title;
String link;
}
现在您可以像下面这样解析您的 xml
public void parseXml(Strng xml){
XmlParserCreator parserCreator = new XmlParserCreator() {
@Override
public XmlPullParser createParser() {
try {
return XmlPullParserFactory.newInstance().newPullParser();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
};
GsonXml gsonXml = new GsonXmlBuilder().setXmlParserCreator(parserCreator).create();
Channel channel = gsonXml.fromXml(xml, Channel.class);
Log.v("temp", "Title : " + channel.item.title);
}
我只想使用 XMLpullparser 解析项目部分中的标题和 link 标签。我如何通过忽略以前的标题和 link 标签来解析它?
<channel>
<title>AAA</title>
<link>linkone</link>
<item>
<title>BBB</title>
<link>link2</link>
</item>
</channel>
我目前使用的解析器如下。如何忽略起始标题和 link 标签?
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
FileInputStream fis = ctx.openFileInput("StackSites.xml");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
xpp.setInput(reader);
int eventtype = xpp.getEventType();
while (eventtype != XmlPullParser.END_DOCUMENT){
String tagname = xpp.getName();
switch (eventtype){
case XmlPullParser.START_TAG:
if(tagname.equalsIgnoreCase("item")){
curStackSite = new StackSite();
}
break;
case XmlPullParser.TEXT:
curText = xpp.getText();
break;
case XmlPullParser.END_TAG:
if(tagname.equalsIgnoreCase("item")){
stackSites.add(curStackSite);
}
if(tagname.equalsIgnoreCase("title")){
curStackSite.setName(curText);
}
if(tagname.equalsIgnoreCase("link")){
curStackSite.setLink(curText);
}
break;
default:
break;
}
eventtype = xpp.next();
}
我不知道这样做的正确方法,但我所做的是在案例中 XmlPullParser.START_TAG:如果找到项目标签,我将计数器设置为 1。如果 XmlPullParser.END_TAG:如果计数器!= 0,那么只有它会增加对象的价值。这个方法有效。如果有人知道更准确的方法,请post。谢谢。
有一个库可用于解析 xml 对 POJO class 的响应。 https://github.com/stanfy/gson-xml
使用本库,您无需手动解析。您需要根据您的 xml.
创建 POJO class对于给定的xml,你需要创建两个POJO classes
Channel.java
public class Channel {
Item item;
}
Item.java
public class Item {
String title;
String link;
}
现在您可以像下面这样解析您的 xml
public void parseXml(Strng xml){
XmlParserCreator parserCreator = new XmlParserCreator() {
@Override
public XmlPullParser createParser() {
try {
return XmlPullParserFactory.newInstance().newPullParser();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
};
GsonXml gsonXml = new GsonXmlBuilder().setXmlParserCreator(parserCreator).create();
Channel channel = gsonXml.fromXml(xml, Channel.class);
Log.v("temp", "Title : " + channel.item.title);
}