Парсим XML используя SAX Parser

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-файла:

sax1

Вы можете хранить XML-файл на сервере, а вместо папки assets. Для этого  вам понадобится URL-файла, чтобы создать объект InputStream.

Источник: XML Parsing Using SAX Parser

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *