Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当xml文档具有多层次父文档时,如何解析xml?_Java_Android_Xml_Parsing - Fatal编程技术网

Java 当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

我正在尝试解析来自响应的xml流,以填充我的android应用程序中的一些字段。如果响应中有一个关键节点项和多个子项,我可以解析该响应

XML是

我的解析代码是

我的问题从xml成为多层次开始,例如

如何解析上述示例?

引用文档

我们推荐XmlPullParser,这是一种高效且可维护的方法 在Android上解析XML

您可以使用xml拉式解析器

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):