Android-обеспечивает возможность разбора XML-файла, используя различные анализаторы, такие как SAX, DOM и т. д. SAX-парсер не может быть использован для создания XML-файлов, он может только анализировать XML-файл.
Хранение данных на Andoid-устройстве не хорошо и безопасно, когда у вас есть большой объем данных, поэтому мы храним данные на сервере и передаем их в XML-формате, а затем мы разбираем их и показываем на устройстве.
Для разбора данных с использованием SAX вы можете создать InputStream либо из URL или из локального файла.В этом уроке мы будем хранить XML-файл в папке assets и создавать InputStream и разбирать его. Выполните следующие действия:
Шаг 1: Создайте новый Andoid-проект с именем SAXxmlParsing.
Шаг 2: Создайте в папке assets XML-файл с именем exampleXML.xml напишите в нем следующее:
<records> <hotel> <name>foodpanda</name> <address>USA</address> </hotel> <hotel> <name>Chipotle</name> <address>Virginia</address> </hotel> <hotel> <name>McDonald's</name> <address>India</address> </hotel> </records>
Шаг 3: Создайте TextView в main.xml, для отображения данные, получаемых из XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:text="Hotels of your Choice are:" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView1"> </RelativeLayout>
Шаг 4: Напишите следующее в вашем MainActivity.java:
package com.example.saxxmlparsing; import java.io.InputStream; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends Activity { TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.textView1); try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new DefaultHandler() { boolean name = false; boolean salary = false; public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equalsIgnoreCase("name")) { name = true; } if (qName.equalsIgnoreCase("address")) { salary = true; } } public void endElement(String uri, String localName, String qName) throws SAXException { } public void characters(char ch[], int start, int length) throws SAXException { if (name) { tv.setText(tv.getText() + "nn Hotel Name : " + new String(ch, start, length)); name = false; } if (salary) { tv.setText(tv.getText() + "n Address : " + new String(ch, start, length)); salary = false; } } }; InputStream is = getAssets().open("exampleXML.xml"); saxParser.parse(is, handler); } catch (Exception e) { e.printStackTrace(); } } }
На выходе будет отображаться список отелей с адресами, взятые из XML-файла:
Вы можете хранить XML-файл на сервере, а вместо папки assets. Для этого вам понадобится URL-файла, чтобы создать объект InputStream.
Источник: XML Parsing Using SAX Parser