Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
如何在android中使用SAX解析获取数据_Android - Fatal编程技术网

如何在android中使用SAX解析获取数据

如何在android中使用SAX解析获取数据,android,Android,对于下面的xml示例,任何主体都可以展示如何使用SAX解析从xml文档中获取数据 <root> <parent> <child1>xyz</child1> <child2>abc</child2> </parent> </root> xyz abc 为此,我们如何在android中编写sax解析代码 感谢您的帮助……这里有很多SAX教程和答案。

对于下面的xml示例,任何主体都可以展示如何使用SAX解析从xml文档中获取数据

<root>
   <parent>
      <child1>xyz</child1>
      <child2>abc</child2>
   </parent>
</root>        

xyz
abc
为此,我们如何在android中编写sax解析代码


感谢您的帮助……

这里有很多SAX教程和答案。是关于StackOverflow的一个很好的答案,它清楚地解释了SAX解析器的工作原理

公共类JaappApplication扩展了应用程序{
    public class JaappApplication extends Application {
        public static final int FAIL = 0;
        public static final int SUCCESS = 1;

        //XML parsers
        public static final int QUESTIONS = 0;


        //PUTEXTRAS 
        public static final String SUBJECTID = "subjectid";
        public static String subtypeid;
        public static String subtypeoption;

    }

    public static ArrayList<QuestionsDto> getQuestionsDtos(String quesid)
    {
        ArrayList<QuestionsDto> arr = new ArrayList<QuestionsDto>();
        String url1 = url + "getquestions.php?subjectid=" + quesid;
        XMLParser xmlParser = new XMLParser(JaappApplication.QUESTIONS);
        int x = xmlParser.parseXml(url1, JaappApplication.QUESTIONS);
        arr = xmlParser.getQuestions();
        return arr;
    }

                package com.jaapp.xmlparsing;

        import java.io.InputStream;
        import java.net.URI;
        import java.net.UnknownHostException;
        import java.util.ArrayList;

        import javax.xml.parsers.SAXParser;
        import javax.xml.parsers.SAXParserFactory;

        import org.apache.http.HttpResponse;
        import org.apache.http.client.HttpClient;
        import org.apache.http.client.methods.HttpGet;
        import org.apache.http.impl.client.DefaultHttpClient;
        import org.xml.sax.InputSource;
        import org.xml.sax.XMLReader;

        import com.jaapp.application.JaappApplication;
        import com.jaapp.dto.QuestionsDto;

        import android.util.Log;

        public class XMLParser {
            protected static final String TAG = XMLParser.class.getCanonicalName();
            private static QuestionsReader questionHandler;

            public XMLParser(int initHandler) {
                if (initHandler == JaappApplication.QUESTIONS) {
                    questionHandler = new QuestionsReader();
                }
            }

            public int parseXml(String parseString, int type) {
                try {
                    /* Create a URL we want to load some xml-data from. */
                    URI lUri = new URI(parseString);

                    // Prepares the request.
                    HttpClient lHttpClient = new DefaultHttpClient();
                    HttpGet lHttpGet = new HttpGet();
                    lHttpGet.setURI(lUri);

                    // Sends the request and read the response
                    HttpResponse lHttpResponse = lHttpClient.execute(lHttpGet);
                    InputStream lInputStream = lHttpResponse.getEntity().getContent();
                    int status = lHttpResponse.getStatusLine().getStatusCode();

                    /* Get a SAXParser from the SAXPArserFactory. */
                    SAXParserFactory spf = SAXParserFactory.newInstance();
                    spf.setNamespaceAware(true);
                    SAXParser sp = spf.newSAXParser();

                    /* Get the XMLReader of the SAXParser we created. */
                    XMLReader xr = sp.getXMLReader();
                    if(type == JaappApplication.QUESTIONS)  {
                        xr.setContentHandler(questionHandler);  
                    }


                    /* Create a new ContentHandler and apply it to the XML-Reader */

                    /* Parse the xml-data from our URL. */

                    if (!((status >= 200) && (status < 300))) {
                    }
                    else
                    {
                        InputSource is = new InputSource(lInputStream);
                        is.setEncoding("ISO-8859-1");
                        xr.parse(is);

                    }
                    /* Parsing has finished. */
                    return JaappApplication.SUCCESS;
                }
                catch(UnknownHostException e)
                {
                    Log.e(TAG, e.toString());
                    return JaappApplication.FAIL;
                }
                catch (Exception e) {
                    /* Display any Error to the GUI:. */
                    Log.e(TAG, e.toString());
                    return JaappApplication.FAIL;
                }

            }

            public int parseXml(InputStream is, int type) {
                try {
                    /* Get a SAXParser from the SAXPArserFactory. */
                    SAXParserFactory spf = SAXParserFactory.newInstance();
                    spf.setNamespaceAware(true);
                    SAXParser sp = spf.newSAXParser();

                    /* Get the XMLReader of the SAXParser we created. */
                    XMLReader xr = sp.getXMLReader();
                    if(type == JaappApplication.QUESTIONS)  {
                        xr.setContentHandler(questionHandler);  
                //  }   else if(type == NRTApplication.BOTTOMAD)    {
                //      xr.setContentHandler(myBottomAdHandler);    
                    }

                    /* Create a new ContentHandler and apply it to the XML-Reader */

                    /* Parse the xml-data from our URL. */
                    InputSource is1 = new InputSource(is);
                    is1.setEncoding("ISO-8859-1");
                    xr.parse(is1);
                    /* Parsing has finished. */
                    return JaappApplication.SUCCESS;
                }
                catch(UnknownHostException e)
                {
                    Log.e(TAG, e.toString());
                    return JaappApplication.FAIL;
                }
                catch (Exception e) {
                    /* Display any Error to the GUI:. */
                    Log.e(TAG, "Exception XML parser: " + e.toString());
                    return JaappApplication.FAIL;
                }

            }


            public ArrayList<QuestionsDto> getQuestions() {
                return questionHandler.getQuestions();
            }



        }












        package com.jaapp.xmlparsing;

        import java.util.ArrayList;

        import org.xml.sax.Attributes;
        import org.xml.sax.SAXException;
        import org.xml.sax.helpers.DefaultHandler;

        import android.util.Log;

        import com.jaapp.dto.QuestionsDto;

        public class QuestionsReader extends DefaultHandler {
            private static final String TAG = QuestionsReader.class.getCanonicalName();
            private String tempVal;
            private ArrayList<QuestionsDto> completeQuestionsList;
            private QuestionsDto tempQues;

            public QuestionsReader() {
                completeQuestionsList = new ArrayList<QuestionsDto>();
            }

            @Override
            public void startDocument() throws SAXException {
            }

            @Override
            public void endDocument() throws SAXException {
                // Nothing to do
            }

            @Override
            public void startElement(String uri, String localName, String qName,
                    Attributes attributes) throws SAXException {
                if (localName.equalsIgnoreCase("question")) {
                    tempQues = new QuestionsDto();
                }
                tempVal = "";
            }

            @Override
            public void characters(char[] ch, int start, int length)
                    throws SAXException {
                tempVal += new String(ch, start, length);
            }

            @Override
            public void endElement(String uri, String localName, String qName)
                    throws SAXException {
                if (localName.equalsIgnoreCase("question")) {
                    completeQuestionsList.add(tempQues);
                } else if(localName.equalsIgnoreCase("id")) {
                    tempQues.setQid(tempVal);
                } else if(localName.equalsIgnoreCase("level")) {
                    tempQues.setQlevel(Integer.parseInt(tempVal));
                } else if(localName.equalsIgnoreCase("description")) {
                    tempQues.setQquestion(tempVal);
                }
            }

            public ArrayList<QuestionsDto> getQuestions() {
                return completeQuestionsList;
            }
        }
公共静态最终整数失败=0; 公共静态最终整数成功=1; //XML解析器 公共静态最终整数问题=0; //多余的 公共静态最终字符串SUBJECTID=“SUBJECTID”; 公共静态字符串子类型ID; 公共静态字符串子类型选项; } 公共静态数组列表getQuestionsDtos(字符串quesid) { ArrayList arr=新的ArrayList(); 字符串url1=url+“getquestions.php?subjectid=“+quesid; XMLParser=newxmlparser(JaappApplication.QUESTIONS); intx=xmlParser.parseXml(url1,JaappApplication.QUESTIONS); arr=xmlParser.getQuestions(); 返回arr; } 包com.jaapp.xml解析; 导入java.io.InputStream; 导入java.net.URI; 导入java.net.UnknownHostException; 导入java.util.ArrayList; 导入javax.xml.parsers.SAXParser; 导入javax.xml.parsers.SAXParserFactory; 导入org.apache.http.HttpResponse; 导入org.apache.http.client.HttpClient; 导入org.apache.http.client.methods.HttpGet; 导入org.apache.http.impl.client.DefaultHttpClient; 导入org.xml.sax.InputSource; 导入org.xml.sax.XMLReader; 导入com.jaapp.application.JaappApplication; 导入com.jaapp.dto.questionsdo; 导入android.util.Log; 公共类XMLParser{ 受保护的静态最终字符串标记=XMLParser.class.getCanonicalName(); 私有静态问题阅读器问题处理程序; 公共XMLParser(int initHandler){ if(initHandler==JaappApplication.QUESTIONS){ questionHandler=新的QuestionsReader(); } } 公共int-parseXml(String-parseString,int-type){ 试一试{ /*创建要从中加载一些xml数据的URL*/ URI lUri=新URI(parseString); //准备请求。 HttpClient lHttpClient=新的DefaultHttpClient(); HttpGet lHttpGet=新的HttpGet(); lHttpGet.setURI(lUri); //发送请求并读取响应 HttpResponse lHttpResponse=lHttpClient.execute(lHttpGet); InputStream lInputStream=lHttpResponse.getEntity().getContent(); int status=lHttpResponse.getStatusLine().getStatusCode(); /*从SAXPArserFactory获取SAXParser*/ SAXParserFactory spf=SAXParserFactory.newInstance(); spf.setNamespaceAware(true); SAXParser sp=spf.newSAXParser(); /*获取我们创建的SAXParser的XMLReader*/ XMLReader xr=sp.getXMLReader(); if(type==JaappApplication.QUESTIONS){ xr.setContentHandler(questionHandler); } /*创建新的ContentHandler并将其应用于XML读取器*/ /*从我们的URL解析xml数据*/ 如果(!((状态>=200)和&(状态<300))){ } 其他的 { InputSource is=新的InputSource(lInputStream); is.setEncoding(“ISO-8859-1”); xr.parse(is); } /*解析已完成*/ 返回JaappApplication.SUCCESS; } 捕获(未知后异常e) { Log.e(标记,e.toString()); 返回JaappApplication.FAIL; } 捕获(例外e){ /*向GUI显示任何错误:*/ Log.e(标记,e.toString()); 返回JaappApplication.FAIL; } } 公共int-parseXml(InputStream为,int类型){ 试一试{ /*从SAXPArserFactory获取SAXParser*/ SAXParserFactory spf=SAXParserFactory.newInstance(); spf.setNamespaceAware(true); SAXParser sp=spf.newSAXParser(); /*获取我们创建的SAXParser的XMLReader*/ XMLReader xr=sp.getXMLReader(); if(type==JaappApplication.QUESTIONS){ xr.setContentHandler(questionHandler); //}else if(type==nrtaplication.BOTTOMAD){ //xr.setContentHandler(myBottomAdHandler); } /*创建新的ContentHandler并将其应用于XML读取器*/ /*从我们的URL解析xml数据*/ InputSource is1=新的InputSource(is); is1.设置编码(“ISO-8859-1”); xr.parse(is1); /*解析已完成*/ 返回JaappApplication.SUCCESS; } 捕获(未知后异常e) { Log.e(标记,e.toString()); 返回JaappApplication.FAIL; } 捕获(例外e){ /*向GUI显示任何错误:*/