Статьи

Учимся анализировать данные XML в вашем приложении для Android

Вступление

Мы находимся в эпохе, когда, как правило, приложение не может работать в полной изоляции и не имеет всех данных, необходимых для его работы. Как правило, он должен общаться с каким-либо другим приложением — возможно, через Интернет — и читать или отправлять в него некоторые данные.

Однако приложения, с которыми взаимодействует ваше приложение, могут не разрабатываться с использованием той же технологии, что и ваша. Для плавного обмена данными между вашим приложением и каким-либо другим приложением вы можете обмениваться данными в открытом формате, таком как расширяемый язык разметки или XML.

XML-документ — это читаемый человеком текстовый документ, который содержит некоторые начальные и конечные теги с атрибутами и данными в этих тегах. Большинство языков и платформ поддерживают синтаксический анализ и создание в них XML-документов. Android также предоставляет нам API, чтобы мы могли легко и гибко работать и обрабатывать XML-документы в нашем приложении. В этой статье мы рассмотрим, как вы можете эффективно работать с XML-документами в своем приложении для Android.

Классы для разбора XML в Android

Существуют различные парсеры XML, которые мы можем использовать на платформе Android. Для XML Android рекомендует использовать XMLPullParser . Android предоставляет множественную реализацию XMLPullParser и вы можете использовать любой из них в своей программе. В зависимости от способа создания XMLPullParser будет выбран XMLPullParser реализации синтаксического анализатора.

Создание вашего парсера

Как указано выше, в Android есть несколько способов создания XMLPullParser . Первый способ сделать это — использовать класс Xml, как показано ниже:

  xmlpullparser parser = Xml.newPullParser (); 

Вам нужно просто вызвать newPullParser который вернет вам ссылку на синтаксический анализатор XMLPull . Или вы можете получить ссылку из XmlPullParserFactory как показано ниже.

  XmlPullParserFactory pullParserFactory;
		 пытаться {
			 pullParserFactory = XmlPullParserFactory.newInstance ();
			 XmlPullParser parser = pullParserFactory.newPullParser ();
		 } catch (XmlPullParserException e) {

			 e.printStackTrace ();
		 } 

Разбор XML

Когда у нас есть ссылка на синтаксический анализатор, пришло время использовать ее для анализа XML. Мы собираемся использовать следующий XML в качестве XML для анализа. Итак, теперь создайте файл с именем temp.xml в папке ваших ресурсов с содержимым:

  <? xml version = "1.0" encoding = "UTF-8"?>
 <изделия>
	 <Продукт>     
		 <PRODUCTNAME> джинсы </ PRODUCTNAME>
		 <Productcolor> красный </ productcolor>
		 <Productquantity> 5 </ productquantity>
	 </ Продукт>
	 <Продукт>     
		 <PRODUCTNAME> Tshirt </ PRODUCTNAME>
		 <Productcolor> синий </ productcolor>
		 <Productquantity> 3 </ productquantity>
	 </ Продукт>
	 <Продукт>     
		 <PRODUCTNAME> шорты </ PRODUCTNAME>
		 <Productcolor> зеленый </ productcolor>
		 <Productquantity> 4 </ productquantity>
	 </ Продукт>
 </ Продукты> 

Код действия для чтения и анализа следующий:

  Класс продукта
 {

	 публичное строковое имя;
	 публичное количество строк;
	 публичный цвет строки;

 }
 открытый класс XMLDemo расширяет Activity {

	 @Override
	 protected void onCreate (BundlevedInstanceState) {
		 super.onCreate (savedInstanceState);
		 setContentView (R.layout.main);

		 XmlPullParserFactory pullParserFactory;
		 пытаться {
			 pullParserFactory = XmlPullParserFactory.newInstance ();
			 XmlPullParser parser = pullParserFactory.newPullParser ();

			     InputStream in_s = getApplicationContext (). GetAssets (). Open ("temp.xml");
		         parser.setFeature (XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
	             parser.setInput (in_s, null);

	             ParseXML (СА);

		 } catch (XmlPullParserException e) {

			 e.printStackTrace ();
		 } catch (IOException e) {
			 // TODO автоматически сгенерированный блок catch
			 e.printStackTrace ();
		 }

	 }

	 закрытый void parseXML (синтаксический анализатор XmlPullParser) создает исключение XmlPullParserException, IOException
	 {
		 ArrayList <product> products = null;
         int eventType = parser.getEventType ();
         Продукт currentProduct = ноль;

         while (eventType! = XmlPullParser.END_DOCUMENT) {
             Имя строки = ноль;
             switch (eventType) {
                 case XmlPullParser.START_DOCUMENT:
                	 products = new ArrayList ();
                     перемена;
                 case XmlPullParser.START_TAG:
                     name = parser.getName ();
                     if (name == "product") {
                         currentProduct = новый продукт ();
                     } else if (currentProduct! = null) {
                         if (name == "productname") {
                             currentProduct.name = parser.nextText ();
                         } else if (name == "productcolor") {
                        	 currentProduct.color = parser.nextText ();
                         } else if (name == "productquantity") {
                             currentProduct.quantity = parser.nextText ();
                         }  
                     }
                     перемена;
                 case XmlPullParser.END_TAG:
                     name = parser.getName ();
                     if (name.equalsIgnoreCase ("product") && currentProduct! = null) {
                    	 products.add (currentProduct);
                     } 
             }
             eventType = parser.next ();
         }

         printProducts (продукция);
	 }

	 private void printProducts (ArrayList </ product> <product> products)
	 {
		 Строка содержимого = "";
		 Iterator </ product> <product> it = products.iterator ();
		 в то время как (it.hasNext ())
		 {
			 Product currProduct = it.next ();
			 content = content + "nnnProduct:" + currProduct.name + "n";
			 content = content + "Количество:" + currProduct.quantity + "n";
			 content = content + "Color:" + currProduct.color + "n";

		 }

		 TextView display = (TextView) findViewById (R.id.info);
		 display.setText (содержание);
	 }

	 @Override
	 public boolean onCreateOptionsMenu (Меню меню) {
		 // раздувать меню;  это добавляет элементы в панель действий, если она присутствует.
		 getMenuInflater (). inflate (R.menu.main, menu);
		 вернуть истину;
	 }

 } 

В приведенном выше коде мы создали небольшой класс с именем Product, который имеет три члена: имя, количество и цвет.

В упражнении мы сначала получаем экземпляр XMLPullParser затем открываем temp.xml в качестве temp.xml . Как только это будет сделано, мы устанавливаем входной inputstream качестве входного для парсера. Затем мы анализируем xml в нашей функции parseXML .

В функции parseXML мы создаем ArrayList в котором мы будем хранить все продукты, которые мы будем анализировать из XML. Как только это будет сделано, мы создадим цикл, который будет работать до конца документа.

В начале документа мы создали ArrayList продуктов. Если тег начинается и если тег является продуктом, мы знаем, что теперь это новый продукт, поэтому мы создаем новый экземпляр продукта. Затем, если другие теги будут прочитаны, мы просто прочитаем и добавим значения в наш экземпляр Product.

Как только тег Product заканчивается, мы добавляем продукт в ArrayList . Как только все продукты добавлены, мы вызываем функцию printProducts в которой мы перебираем ArrayList и затем печатаем значения на экране.

Если мы запустим действие сейчас, мы увидим вывод следующим образом:

Android XMLDemo дисплей

Другие парсеры, используемые для XML

DOM

Есть и другие парсеры, которые можно использовать для разбора XML в Android. Может использоваться синтаксический анализатор DOM, который создает полную модель памяти XML и может использоваться для создания или анализа XML. Парсеры DOM обычно занимают много памяти.

Вы можете получить экземпляр DOMBuilder как показано ниже

  пытаться {
			 DocumentBuilderFactory DOMfactory = DocumentBuilderFactory.newInstance ();
			 DocumentBuilder DOMbuilder = DOMfactory.newDocumentBuilder ();

		 } catch (ParserConfigurationException e) {

			 e.printStackTrace ();
		 } 

SAX парсеры

SAXParsers также могут быть использованы для анализа XML и потреблять гораздо меньше памяти, чем DOM-анализаторы. SAXParsers можно использовать только для анализа XML, а не для их создания. Вы можете получить ссылку на SAXParser как показано ниже:

  SAXParserFactory SAXfactory = SAXParserFactory.newInstance ();
         пытаться {
             SAXParser SAXParserObj = SAXfactory.newSAXParser ();

         } catch (исключение e) {
        	 e.printStackTrace ();
         } 

Вывод

XML-документы становятся стандартным способом обмена данными между приложениями через Интернет. Поскольку наши приложения для Android становятся все умнее и умнее, вашему приложению для Android может потребоваться обмен данными между различными приложениями через Интернет. Android предоставляет богатый набор API для работы с XML-документами в вашем приложении Android.

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

Итак, получайте удовольствие от обработки XML в вашем следующем Android-приложении.

И если вам понравилось читать этот пост, вы полюбите Learnable ; место, чтобы узнать новые навыки и приемы у мастеров. Участники получают мгновенный доступ ко всем электронным книгам и интерактивным онлайн-курсам SitePoint, таким как « Начало разработки Android» .

Комментарии к этой статье закрыты. У вас есть вопрос о разработке приложений? Почему бы не спросить об этом на наших форумах ?