XML расшифровывается как расширяемый язык разметки. XML является очень популярным форматом и широко используется для обмена данными в Интернете. В этой главе объясняется, как анализировать файл XML и извлекать из него необходимую информацию.
Android предоставляет три типа анализаторов XML: DOM, SAX и XMLPullParser . Среди них Android рекомендует XMLPullParser, потому что он эффективен и прост в использовании. Поэтому мы будем использовать XMLPullParser для анализа XML.
Первым шагом является определение полей в данных XML, в которых вы заинтересованы. Например. В приведенном ниже XML-коде мы заинтересованы только в получении температуры.
<?xml version="1.0"?> <current> <city id="2643743" name="London"> <coord lon="-0.12574" lat="51.50853"/> <country>GB</country> <sun rise="2013-10-08T06:13:56" set="2013-10-08T17:21:45"/> </city> <temperature value="289.54" min="289.15" max="290.15" unit="kelvin"/> <humidity value="77" unit="%"/> <pressure value="1025" unit="hPa"/> </current>
XML — Элементы
XML-файл состоит из множества компонентов. Вот таблица, определяющая компоненты файла XML и их описание.
Sr.No | Компонент и описание |
---|---|
1 |
пролог Файл XML начинается с пролога. Первая строка, содержащая информацию о файле — это пролог |
2 |
События XML-файл имеет много событий. Событие может быть таким. Начало документа, конец документа, начало тега, конец тега, текст и т. Д. |
3 |
Текст Помимо тегов и событий, XML-файл также содержит простой текст. Например, ГБ — это текст в теге страны. |
4 |
Атрибуты Атрибуты — это дополнительные свойства тега, такие как значение и т. Д. |
пролог
Файл XML начинается с пролога. Первая строка, содержащая информацию о файле — это пролог
События
XML-файл имеет много событий. Событие может быть таким. Начало документа, конец документа, начало тега, конец тега, текст и т. Д.
Текст
Помимо тегов и событий, XML-файл также содержит простой текст. Например, ГБ — это текст в теге страны.
Атрибуты
Атрибуты — это дополнительные свойства тега, такие как значение и т. Д.
XML — Парсинг
На следующем шаге мы создадим объект XMLPullParser, но для его создания мы сначала создадим объект XmlPullParserFactory, а затем вызовем его метод newPullParser () для создания XMLPullParser. Его синтаксис приведен ниже —
private XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance(); private XmlPullParser myparser = xmlFactoryObject.newPullParser();
Следующий шаг включает указание файла для XmlPullParser, который содержит XML. Это может быть файл или поток. В нашем случае это поток. Его синтаксис приведен ниже —
myparser.setInput(stream, null);
Последний шаг — разобрать XML. XML-файл состоит из событий, Name, Text, AttributesValue и т. Д. Таким образом, XMLPullParser имеет отдельную функцию для анализа каждого компонента XML-файла. Его синтаксис приведен ниже —
int event = myParser.getEventType(); while (event != XmlPullParser.END_DOCUMENT) { String name=myParser.getName(); switch (event){ case XmlPullParser.START_TAG: break; case XmlPullParser.END_TAG: if(name.equals("temperature")){ temperature = myParser.getAttributeValue(null,"value"); } break; } event = myParser.next(); }
Метод getEventType возвращает тип события, которое происходит. Например: начало документа, начало тега и т. д. Метод getName возвращает имя тега, и поскольку нас интересует только температура, поэтому мы просто проверяем в условном выражении, что если мы получили тег температуры, мы вызываем метод getAttributeValue, чтобы вернуть нам значение температурного тега.
Помимо этих методов, есть и другие методы, предоставляемые этим классом для лучшего анализа XML-файлов. Эти методы перечислены ниже —
Sr.No | Метод и описание |
---|---|
1 |
getAttributeCount () Этот метод просто возвращает количество атрибутов текущего начального тега |
2 |
getAttributeName (int index) Этот метод возвращает имя атрибута, указанного значением индекса |
3 |
getColumnNumber () Этот метод возвращает Возвращает текущий номер столбца, начиная с 0. |
4 |
getDepth () Этот метод возвращает Возвращает текущую глубину элемента. |
5 |
GetLineNumber () Возвращает текущий номер строки, начиная с 1. |
6 |
getNamespace () Этот метод возвращает URI пространства имен текущего элемента. |
7 |
getPrefix () Этот метод возвращает префикс текущего элемента |
8 |
GetName () Этот метод возвращает имя тега |
9 |
GetText () Этот метод возвращает текст для этого конкретного элемента |
10 |
isWhitespace () Этот метод проверяет, содержит ли текущее событие TEXT только пробельные символы. |
getAttributeCount ()
Этот метод просто возвращает количество атрибутов текущего начального тега
getAttributeName (int index)
Этот метод возвращает имя атрибута, указанного значением индекса
getColumnNumber ()
Этот метод возвращает Возвращает текущий номер столбца, начиная с 0.
getDepth ()
Этот метод возвращает Возвращает текущую глубину элемента.
GetLineNumber ()
Возвращает текущий номер строки, начиная с 1.
getNamespace ()
Этот метод возвращает URI пространства имен текущего элемента.
getPrefix ()
Этот метод возвращает префикс текущего элемента
GetName ()
Этот метод возвращает имя тега
GetText ()
Этот метод возвращает текст для этого конкретного элемента
isWhitespace ()
Этот метод проверяет, содержит ли текущее событие TEXT только пробельные символы.
пример
Вот пример, демонстрирующий использование XML DOM Parser. Он создает базовое приложение, которое позволяет вам анализировать XML.
Чтобы поэкспериментировать с этим примером, вы можете запустить его на реальном устройстве или в эмуляторе.
меры | Описание |
---|---|
1 | Вы будете использовать Android studio для создания приложения Android в пакете com.example.sairamkrishna.myapplication. |
2 | Измените файл src / MainActivity.java, чтобы добавить необходимый код. |
3 | Измените res / layout / activity_main, чтобы добавить соответствующие компоненты XML |
4 | Создайте новый XML-файл в папке Assets / file.xml |
5 | Измените AndroidManifest.xml, чтобы добавить необходимые интернет-разрешения |
6 | Запустите приложение и выберите работающее устройство Android, установите на него приложение и проверьте результаты. |
Ниже приводится содержимое измененного основного файла активности MainActivity.java .
package com.example.sairamkrishna.myapplication; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends Activity { TextView tv1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1=(TextView)findViewById(R.id.textView1); try { InputStream is = getAssets().open("file.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(is); Element element=doc.getDocumentElement(); element.normalize(); NodeList nList = doc.getElementsByTagName("employee"); for (int i=0; i<nList.getLength(); i++) { Node node = nList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element2 = (Element) node; tv1.setText(tv1.getText()+"\nName : " + getValue("name", element2)+"\n"); tv1.setText(tv1.getText()+"Surname : " + getValue("surname", element2)+"\n"); tv1.setText(tv1.getText()+"-----------------------"); } } } catch (Exception e) {e.printStackTrace();} } private static String getValue(String tag, Element element) { NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes(); Node node = nodeList.item(0); return node.getNodeValue(); } }
Ниже приводится содержимое файла Assets / file.xml .
<?xml version="1.0"?> <records> <employee> <name>Sairamkrishna</name> <surname>Mammahe</surname> <salary>50000</salary> </employee> <employee> <name>Gopal </name> <surname>Varma</surname> <salary>60000</salary> </employee> <employee> <name>Raja</name> <surname>Hr</surname> <salary>70000</salary> </employee> </records>
Ниже приводится измененное содержимое файла xml res / layout / activity_main.xml .
<?xml version="1.0" encoding="utf-8"?> <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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
Ниже приводится содержимое файла AndroidManifest.xml .
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sairamkrishna.myapplication" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Давайте попробуем запустить наше приложение, которое мы только что изменили. Я предполагаю, что вы создали свой AVD во время настройки среды. Чтобы запустить приложение из студии Android, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». значок с панели инструментов. Android-студия устанавливает приложение на AVD и запускает его, и, если все в порядке с настройками и приложением, оно отобразится в следующем окне эмулятора —