Android - XML-парсер

XML расшифровывается как Extensible Mark-up Language. XML - очень популярный формат, обычно используемый для обмена данными в Интернете. В этой главе объясняется, как анализировать XML-файл и извлекать из него необходимую информацию.

Android предоставляет три типа анализаторов XML, которые DOM,SAX and 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-файла и их описание.

Старший Нет Компонент и описание
1

Prolog

XML-файл начинается с пролога. Первая строка, содержащая информацию о файле, - это пролог.

2

Events

XML-файл имеет много событий. Событие могло быть таким. Начало документа, конец документа, начало тега, конец тега и текст и т. Д.

3

Text

Помимо тегов и событий, XML-файл также содержит простой текст. Такие какGB текст в теге страны.

4

Attributes

Атрибуты - это дополнительные свойства тега, такие как значение и т. Д.

XML - синтаксический анализ

На следующем этапе мы создадим объект XMLPullParser, но для его создания мы сначала создадим объект XmlPullParserFactory, а затем вызовем его метод newPullParser () для создания XMLPullParser. Его синтаксис приведен ниже -

private XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
private XmlPullParser myparser = xmlFactoryObject.newPullParser();

Следующий шаг включает указание файла для XmlPullParser, который содержит XML. Это может быть файл или поток. В нашем случае это поток, его синтаксис приведен ниже -

myparser.setInput(stream, null);

Последний шаг - разобрать XML. Файл XML состоит из событий, имени, текста, значения атрибутов и т. Д. Итак, 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. Эти методы перечислены ниже -

Старший Нет Метод и описание
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 только символы пробела.

пример

Вот пример, демонстрирующий использование 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 Folder / 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 и запускает его, и если с вашей настройкой и приложением все в порядке, оно отобразит следующее окно эмулятора -