Android-SAX way to parse XML data

XML file creation Apache server has been established in the last introduced, where no more than elaborate
text:
Add the jar package

implementation 'com.squareup.okhttp3:okhttp:3.4.1'

Apply for network permissions in the closure

<uses-permission android:name="android.permission.INTERNET"/>

There is only a Button in the layout file, which will not be explained here. The parsed XML data will be reflected in the log mode.
Create a ContentHandler class and inherit the DefaultHandler class, and rewrite the 5 methods of the parent class
ContentHandler.java. The code is as follows:

public class ContentHandler extends DefaultHandler {
    private String nodeName;
    private StringBuilder id;
    private StringBuilder name;
    private StringBuilder version;
    //开始解析XML文件
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        id = new StringBuilder();
        name = new StringBuilder();
        version = new StringBuilder();
    }
    //开始解析某个节点
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        nodeName = localName;
    }
   //获取某个节点的内容
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        if ("id".equals(nodeName)){
            id.append(ch, start, length);
        }else if ("name".equals(nodeName)){
            name.append(ch, start, length);
        }else if ("version".equals(nodeName)){
            version.append(ch, start, length);
        }
    }
  //完成某个节点解析
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        if ("app".equals(nodeName)) {
            Log.d("ID = ", id.toString().trim());
            Log.d("Name = ", name.toString().trim());
            Log.d("Version = ", version.toString().trim());
            //清空StringBuilder
            id.setLength(0);
            name.setLength(0);
            version.setLength(0);
        }
    }
  //完成整个XML文件解析
    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
    }
}

The MainActivity.java code is as follows:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button SendRequest;
    private TextView ResponseText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SendRequest = (Button) findViewById(R.id.SendRequest);
        ResponseText = (TextView)findViewById(R.id.Response);
        SendRequest.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
      if (v.getId() == R.id.SendRequest){
          SendRequestToOkhttp();
      }
    }
    private void SendRequestToOkhttp() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient Client = new OkHttpClient();
                    //本机ip地址
                    Request request = new Request.Builder().url("http://192.168.0.60:8888/data.xml").build();//发送请求
                    Response response = Client.newCall(request).execute();//发送请求并获取服务器返回的数据
                    String ResponseData = response.body().string();//获取具体数据
                    ParseXMLWithSAX(ResponseData);//显示数据
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
    private void ParseXMLWithSAX(String XMLData){
        try{
            SAXParserFactory factory = SAXParserFactory.newInstance();//获取SAXParserFactory实例
            XMLReader xmlReader = factory.newSAXParser().getXMLReader();
            ContentHandler handler = new ContentHandler();
            xmlReader.setContentHandler(handler);
            //开始解析
            xmlReader.parse(new InputSource(new StringReader(XMLData)));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

Guess you like

Origin blog.csdn.net/News53231323/article/details/113834282