Android object to xml

Пример работы с JAXB. Сохраняем Java объект в XML, восстанавливаем объект из XML

JAXB (Java Architecture for XML Binding) — Java API для маршалинга объекта в XML и восстановления объекта из XML файла. Изначально JAXB был отдельным проектом, но своей простотой и удобством быстро завоевал популярность Java разработчиков. Именно поэтому в Java 6 JAXB стал частью JDK, а в Java 7 прокачался до версии 2.0.

Ранее мы уже работали с XML в Java с помощью JDOM Parser, StAX Cursor API, DOM Parser и других способов, а в этой статье научимся отображать (ставить в соответствие) Java классы и XML файлы с помощью JAXB.

Теория по JAXB

JAXB использует аннотации, поэтому работать с ним легко и просто. Чтобы сохранить Java объект в XML файл, мы должны проставить необходимые JAXB аннотации в классе и методах класса, а затем создать объект Marshaller для преобразования/сериализации/сохранения/маршалинга (кому как удобно это называть) объекта в XML.

Также есть специальный класс JAXBContext , который является точкой входа для JAXB и предоставляет методы для сохранения/восстановления объекта.

Основные JAXB аннотации

  • Аннотация @XmlRootElement определяет корневой элемент для содержимого XML.
  • Аннотация @XmlType используется для упорядочения элементов в XML.
  • Аннотацией @XmlTransient помечается то, что не будет не записано в XML.
  • Аннотацией @XmlAttribute помечается то, что будет использовано в качестве атрибута.
  • Аннотация @XmlElement(name=»qwerty») — создаст элемент с именем «qwerty».

Также часто используются следующие аннотации:

  • @XmlElementWrapper — обертка вокруг коллекций для читабельности сгенерированного XML
  • Объекты другого класса помечаются аннотацией @XmlSeeAlso .
  • @XmlEnum и @XmlEnumValue — для Enum и значений
  • @XmlElements — создание контейнеров для нескольких @XmlElement

Подробнее с другими аннотациями вы можете ознакомиться на официальном сайте JAXB.

Сохраняем Java объект в XML и восстанавливаем его с помощью JAXB

Ниже представлена простая программа преобразования объекта в XML и его обратная конвертация из XML в Java объект.

Создадим класс Student и расставим нужные нам аннотации:

Источник

Android XML Parsing using DOM Parser

Generally, XML (Extensible Mark-up Language) is one of the commonly used data exchange formats to interchange the data between servers.

In android, we have three types of XML parsers to parse the XML data to get the required information in android applications, those are

Now we will see how to use DOM parser in android applications to parse the XML document to get the required information.

Android DOM Parser

In android, DOM parser will use an object-based approach to create and parse the XML files in android applications.

Generally, the DOM parser will load the XML file into memory to parse the XML document, due to that it will consume more memory and it will parse the XML document from starting node to end node.

Читайте также:  Roblox studio для андроид

Basically, the XML file will contain a following 4 main components.

Component Description
Prolog Generally, the XML file will start with a prolog. The first line that contains the information about a file is prolog.
Events Generally, the XML file will contain many events that include document start and end, tag start and end, etc.
Text It’s a simple text in XML tag elements.
Attributes Attributes are the additional properties of a tag such as value etc. present within the tag.

Following is the sample structure of the XML file with user details in android applications.

xml version = » 1.0 » encoding = » utf-8 » ?>

name > Suresh Dasari name >

designation > Team Leader designation >

loation > Hyderabad loation >

name > Rohini Alavala name >

designation > Agricultural Officer designation >

loation > Guntur loation >

If you observe above xml structure it contains a different type of components such as prolog, events, text and attributes.

Android DOM XML Parsing

To read and parse the XML data using DOM parser in android, we need to create an instance of DocumentBuilderFactory, DocumentBuilder and Document objects in android applications.

Following is the code snippet of reading and parsing the XML data using DOM parser in android applications with DocumentBuilderFactory, DocumentBuilder, and Document objects to get the required information from XML objects.

InputStream istream = getAssets().open( «userdetails.xml» );
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(istream);
NodeList nList = doc.getElementsByTagName( «user» );
for ( int i = 0 ;i if (nList.item( 0 ).getNodeType() == Node. ELEMENT_NODE ) <
HashMap user = new HashMap<>();
Element elm = (Element)nList.item(i);
user.put( «name» , getNodeValue( «name» ,elm));
user.put( «designation» , getNodeValue( «designation» ,elm));
user.put( «location» , getNodeValue( «location» ,elm));
userList.add(user);
>
>

If you observe above code snippet, we used DocumentBuilderFactory, DocumentBuilder and Document objects to parse the XML data to get required information.

Now we will see how to parse XML data using DOM parser and bind the parsed XML data to Listview in android application with examples.

Android XML Parsing with DOM Parser Example

Following is the example of parsing the XML data and get the required information from it using DOM parser in android applications.

Create a new android application using android studio and give names as XMLParserExample. In case if you are not aware of creating an app in android studio check this article Android Hello World App.

Once we are done with creation of an application, create an assets folder under /src/main folder and add a new resource file (userdetails.xml), for that right click on assets folder à add new Android resource file à Give name as userdetails.xml like as shown below.

Now open userdetails.xml file and write the code like as shown below.

userdetails.xml

xml version = » 1.0 » encoding = » utf-8 » ?>

name > Suresh Dasari name >

designation > Team Leader designation >

loation > Hyderabad loation >

name > Rohini Alavala name >

designation > Agricultural Officer designation >

loation > Guntur loation >

name > Trishika Dasari name >

designation > Charted Accountant designation >

loation > Guntur loation >

Now open activity_main.xml file from \res\layout folder path and write the code like as shown below.

activity_main.xml

xml version= «1.0» encoding= «utf-8» ?>
LinearLayout xmlns: android = «http://schemas.android.com/apk/res/android»
android :layout_width= «fill_parent»
android :layout_height= «fill_parent»
android :orientation= «vertical» >
ListView
android :id= «@+id/user_list»
android :layout_width= «fill_parent»
android :layout_height= «wrap_content»
android :dividerHeight= «1dp»/>
LinearLayout >

After that create an another layout file (list_row.xml) in /res/layout folder to show the data in listview, for that right click on layout folder à add new Layout resource file à Give name as list_row.xml and write the code like as shown below.

list_row.xml

xml version= «1.0» encoding= «utf-8» ?>
RelativeLayout xmlns: android = «http://schemas.android.com/apk/res/android»
android :layout_width= «fill_parent»
android :layout_height= «wrap_content»
android :orientation= «horizontal»
android :padding= «5dip» >
TextView
android :id= «@+id/name»
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :textStyle= «bold»
android :textSize= «17dp»/>
TextView
android :id= «@+id/designation»
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :layout_below= «@id/name»
android :layout_marginTop= «7dp»
android :textColor= «#343434»
android :textSize= «14dp»/>
TextView
android :id= «@+id/location»
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :layout_alignBaseline= «@+id/designation»
android :layout_alignBottom= «@+id/designation»
android :layout_alignParentRight= «true»
android :textColor= «#343434»
android :textSize= «14dp»/>
RelativeLayout >

Now open your main activity file MainActivity.java from \java\com.tutlane.xmlparserexample path and write the code like as shown below

MainActivity.java

package com.tutlane.xmlparserexample;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

public class MainActivity extends AppCompatActivity <
@Override
protected void onCreate(Bundle savedInstanceState) <
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
try <
ArrayList > userList = new ArrayList<>();
ListView lv = (ListView) findViewById(R.id. user_list );
InputStream istream = getAssets().open( «userdetails.xml» );
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(istream);
NodeList nList = doc.getElementsByTagName( «user» );
for ( int i = 0 ;i if (nList.item( 0 ).getNodeType() == Node. ELEMENT_NODE ) <
HashMap user = new HashMap<>();
Element elm = (Element)nList.item(i);
user.put( «name» , getNodeValue( «name» ,elm));
user.put( «designation» , getNodeValue( «designation» ,elm));
user.put( «location» , getNodeValue( «location» ,elm));
userList.add(user);
>
>
ListAdapter adapter = new SimpleAdapter(MainActivity. this , userList, R.layout. list_row , new String[]< "name" , "designation" , "location" >, new int []);
lv.setAdapter(adapter);
>
catch (IOException e) <
e.printStackTrace();
> catch (ParserConfigurationException e) <
e.printStackTrace();
> catch (SAXException e) <
e.printStackTrace();
>
>
protected String getNodeValue(String tag, Element element) <
NodeList nodeList = element.getElementsByTagName(tag);
Node node = nodeList.item( 0 );
if (node!= null ) <
if (node.hasChildNodes()) <
Node child = node.getFirstChild();
while (child!= null ) <
if (child.getNodeType() == Node. TEXT_NODE ) <
return child.getNodeValue();
>
>
>
>
return «» ;
>
>

If you observe above code, we used DocumentBuilderFactory, DocumentBuilder and Document objects to get the required information from XML files.

Output of Android XML Parsing with DOM Parser Example

When we run above program in android studio we will get the result as shown below.

This is how we can parse the XML data using DOM parser in android applications to get the required information.

Источник

Работа с XML

Ресурсы XML и их парсинг

Одним из распространенных форматов хранения и передачи данных является xml . Рассмотрим, как с ним работать в приложении на Android.

Приложение может получать данные в формате xml различными способами — из ресурсов, из сети и т.д. В данном случае рассмотрим ситуацию, когда файл xml хранится в ресурсах.

Возьмем стандартный проект Android по умолчанию и в папке res создадим каталог xml . Для этого нажмем на каталог res правой кнопкой мыши и в контекстном меню выберем New -> Android Resource Directory :

В появившемся окне в качестве типа ресурсов укажем xml :

В этот каталог добавим новый файл, который назовем users.xml и который будет иметь следующее содержимое:

Это обычный файл xml, который хранит набор элементов user. Каждый элемент характеризуется наличием двух подэлементов — name и age. Условно говоря, каждый элемент описывает пользователя, у которого есть имя и возраст.

В папку, где находится основной класс MainActivity, добавим новый класс, который назовем User :

Этот класс описывает товар, информация о котором будет извлекаться из xml-файла.

И в ту же папку добавим новый класс UserResourceParser :

Определим для класса UserResourceParser следующий код:

Данный класс выполняет функции парсинга xml. Распарсенные данные будут храниться в переменной users. Непосредственно сам парсинг осуществляется с помощью функции parse . Основную работу выполняет передаваемый в качестве параметра объект XmlPullParser . Этот класс позволяет пробежаться по всему документу xml и получить его содержимое.

Когда данный объект проходит по документу xml, при обнаружении определенного тега он генерирует некоторое событие. Есть четыре события, которые описываются следующими константами:

START_TAG : открывающий тег элемента

TEXT : прочитан текст элемента

END_TAG : закрывающий тег элемента

END_DOCUMENT : конец документа

С помощью метода getEventType() можно получить первое событие и потом последовательно считывать документ, пока не дойдем до его конца. Когда будет достигнут конец документа, то событие будет представлять константу END_DOCUMENT :

Для перехода к следующему событию применяется метод next() .

При чтении документа с помощью метода getName() можно получить название считываемого элемента.

И в зависимости от названия тега и события мы можем выполнить определенные действия. Например, если это открывающий тег элемента user, то создаем новый объект User и устанавливаем, что мы находимся внутри элемента user:

Если событие TEXT , то считано содержимое элемента, которое мы можем прочитать с помощью метода getText() :

Если закрывающий тег, то все зависит от того, какой элемент прочитан. Если прочитан элемент user, то добавляем объект User в коллекцию ArrayList и сбрываем переменную inEntry, указывая, что мы вышли из элемента user:

Если прочитаны элементы name и age, то передаем их значения переменным name и age объекта User:

Теперь изменим класс MainActivity, который будет загружать ресурс xml:

Вначале получаем ресурс xml с помощью метода getXml() , в который передается название ресурса. Данный метод возвращает объект XmlPullParser , который затем используется для парсинга. Для простоты просто выводим данные в окне Logcat :

Источник

Читайте также:  Android recovery что делать если само появилось xiaomi
Оцените статью