Java 当xml文档具有多层次父文档时,如何解析xml?
我正在尝试解析来自响应的xml流,以填充我的android应用程序中的一些字段。如果响应中有一个关键节点项和多个子项,我可以解析该响应 XML是 我的解析代码是 我的问题从xml成为多层次开始,例如 如何解析上述示例?引用文档 我们推荐XmlPullParser,这是一种高效且可维护的方法 在Android上解析XML 您可以使用xml拉式解析器Java 当xml文档具有多层次父文档时,如何解析xml?,java,android,xml,parsing,Java,Android,Xml,Parsing,我正在尝试解析来自响应的xml流,以填充我的android应用程序中的一些字段。如果响应中有一个关键节点项和多个子项,我可以解析该响应 XML是 我的解析代码是 我的问题从xml成为多层次开始,例如 如何解析上述示例?引用文档 我们推荐XmlPullParser,这是一种高效且可维护的方法 在Android上解析XML 您可以使用xml拉式解析器 public class XMLPullParserHandler { private String text; public X
public class XMLPullParserHandler {
private String text;
public XMLPullParserHandler() {
}
public Void parse(InputStream is) {
XmlPullParserFactory factory = null;
XmlPullParser parser = null;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();
parser.setInput(is, null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("menu")) {
}
break;
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("menu")) {
// add employee object to list
} else if (tagname.equalsIgnoreCase("item")) {
} else if (tagname.equalsIgnoreCase("id")) {
Log.i("id is",text);
}
else if (tagname.equalsIgnoreCase("name")) {
Log.i("name is",text);
}
else if (tagname.equalsIgnoreCase("originalcost")) {
}
else if (tagname.equalsIgnoreCase("ori_cost")) {
Log.i("original cost is",text);
}
else if (tagname.equalsIgnoreCase("tax")) {
Log.i("tax is",text);
}
else if (tagname.equalsIgnoreCase("description")) {
Log.i("description is",text);
}
break;
default:
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
日志
编辑:
获取xml fom url并转换为输入流
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpGet request = new HttpGet("url");
HttpResponse response = httpclient.execute(request);
HttpEntity resEntity = response.getEntity();
String _response=EntityUtils.toString(resEntity);
InputStream is = new ByteArrayInputStream(_response.getBytes());
编辑2:
public class XMLPullParserHandler {
private String text;
public XMLPullParserHandler() {
}
public Void parse(InputStream is) {
XmlPullParserFactory factory = null;
XmlPullParser parser = null;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();
parser.setInput(is, null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("xml")) {
}
break;
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("xml")) {
// add employee object to list
} else if (tagname.equalsIgnoreCase("leaders")) {
// no value
}
else if (tagname.equalsIgnoreCase("leader")) {
// no vlaue
} else if (tagname.equalsIgnoreCase("image")) {
Log.i("image is",text);
}
else if (tagname.equalsIgnoreCase("name")) {
Log.i("name is",text);
}
else if (tagname.equalsIgnoreCase("SP DASH")) {
}
else if (tagname.equalsIgnoreCase("state")) {
Log.i("state is",text);
}
else if (tagname.equalsIgnoreCase("constituency")) {
Log.i("constituency is",text);
}
else if (tagname.equalsIgnoreCase("menu")) {
Log.i("menu is",text);
}
else if (tagname.equalsIgnoreCase("description")) {
// no vlaue
}
else if (tagname.equalsIgnoreCase("p")) {
Log.i("p is",text);
}
else if (tagname.equalsIgnoreCase("imagelink")) {
Log.i("imagelink is",text);
}
break;
default:
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
日志
03-18 06:38:28.729: I/image is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.729: I/image is(1345):
03-18 06:38:28.729: I/name is(1345): SP DASH
03-18 06:38:28.729: I/name is(1345):
03-18 06:38:28.729: I/state is(1345): Delhi
03-18 06:38:28.729: I/state is(1345):
03-18 06:38:28.729: I/constituency is(1345): Delhi
03-18 06:38:28.729: I/constituency is(1345):
03-18 06:38:28.739: I/menu is(1345): profile,gallery,video
03-18 06:38:28.739: I/menu is(1345):
03-18 06:38:28.739: I/p is(1345): lflsahflkfhalfkhlskfhalh
03-18 06:38:28.739: I/p is(1345):
03-18 06:38:28.739: I/imagelink is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.739: I/imagelink is(1345):
03-18 06:38:28.739: I/imagelink is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.739: I/imagelink is(1345):
03-18 06:38:28.739: I/imagelink is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.739: I/imagelink is(1345):
03-18 06:38:28.739: I/imagelink is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.739: I/imagelink is(1345):
03-18 06:38:28.739: I/imagelink is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.739: I/imagelink is(1345):
为什么不使用xml PullParser?我必须在哪里发送URL才能得到响应?@Raghunandan因为你知道我得到的是一个字符串作为响应,那么我可以在setInput中设置字符串而不是inputstream吗?@Saty你需要从URL下载xml并将其作为inputstream传递好的@Raghunandan在我下载xml后我可以这样写吗这InputStream in=IOUtils.toInputStreamstring,UTF-8;好的@Raghunandan我需要你的最后一个帮助…我怎么知道在我的案例项目中有多少个元素将被解析?我没有像你所说的那样得到内部节点值,而且如果有很多项目,那么它只解析一个。我怎样才能解析多个?
public class XMLPullParserHandler {
private String text;
public XMLPullParserHandler() {
}
public Void parse(InputStream is) {
XmlPullParserFactory factory = null;
XmlPullParser parser = null;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();
parser.setInput(is, null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("menu")) {
}
break;
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("menu")) {
// add employee object to list
} else if (tagname.equalsIgnoreCase("item")) {
} else if (tagname.equalsIgnoreCase("id")) {
Log.i("id is",text);
}
else if (tagname.equalsIgnoreCase("name")) {
Log.i("name is",text);
}
else if (tagname.equalsIgnoreCase("originalcost")) {
}
else if (tagname.equalsIgnoreCase("ori_cost")) {
Log.i("original cost is",text);
}
else if (tagname.equalsIgnoreCase("tax")) {
Log.i("tax is",text);
}
else if (tagname.equalsIgnoreCase("description")) {
Log.i("description is",text);
}
break;
default:
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
03-18 01:22:39.980: I/id is(954): 1
03-18 01:22:39.980: I/name is(954): Margherita
03-18 01:22:39.990: I/original cost is(954): $30
03-18 01:22:39.990: I/tax is(954): $.2
03-18 01:22:39.990: I/description is(954): Single cheese topping
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpGet request = new HttpGet("url");
HttpResponse response = httpclient.execute(request);
HttpEntity resEntity = response.getEntity();
String _response=EntityUtils.toString(resEntity);
InputStream is = new ByteArrayInputStream(_response.getBytes());
public class XMLPullParserHandler {
private String text;
public XMLPullParserHandler() {
}
public Void parse(InputStream is) {
XmlPullParserFactory factory = null;
XmlPullParser parser = null;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();
parser.setInput(is, null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("xml")) {
}
break;
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("xml")) {
// add employee object to list
} else if (tagname.equalsIgnoreCase("leaders")) {
// no value
}
else if (tagname.equalsIgnoreCase("leader")) {
// no vlaue
} else if (tagname.equalsIgnoreCase("image")) {
Log.i("image is",text);
}
else if (tagname.equalsIgnoreCase("name")) {
Log.i("name is",text);
}
else if (tagname.equalsIgnoreCase("SP DASH")) {
}
else if (tagname.equalsIgnoreCase("state")) {
Log.i("state is",text);
}
else if (tagname.equalsIgnoreCase("constituency")) {
Log.i("constituency is",text);
}
else if (tagname.equalsIgnoreCase("menu")) {
Log.i("menu is",text);
}
else if (tagname.equalsIgnoreCase("description")) {
// no vlaue
}
else if (tagname.equalsIgnoreCase("p")) {
Log.i("p is",text);
}
else if (tagname.equalsIgnoreCase("imagelink")) {
Log.i("imagelink is",text);
}
break;
default:
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
03-18 06:38:28.729: I/image is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.729: I/image is(1345):
03-18 06:38:28.729: I/name is(1345): SP DASH
03-18 06:38:28.729: I/name is(1345):
03-18 06:38:28.729: I/state is(1345): Delhi
03-18 06:38:28.729: I/state is(1345):
03-18 06:38:28.729: I/constituency is(1345): Delhi
03-18 06:38:28.729: I/constituency is(1345):
03-18 06:38:28.739: I/menu is(1345): profile,gallery,video
03-18 06:38:28.739: I/menu is(1345):
03-18 06:38:28.739: I/p is(1345): lflsahflkfhalfkhlskfhalh
03-18 06:38:28.739: I/p is(1345):
03-18 06:38:28.739: I/imagelink is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.739: I/imagelink is(1345):
03-18 06:38:28.739: I/imagelink is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.739: I/imagelink is(1345):
03-18 06:38:28.739: I/imagelink is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.739: I/imagelink is(1345):
03-18 06:38:28.739: I/imagelink is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.739: I/imagelink is(1345):
03-18 06:38:28.739: I/imagelink is(1345): hdwallpaperdownloads.com/…
03-18 06:38:28.739: I/imagelink is(1345):