Вступление
Мы находимся в эпохе, когда, как правило, приложение не может работать в полной изоляции и не имеет всех данных, необходимых для его работы. Как правило, он должен общаться с каким-либо другим приложением — возможно, через Интернет — и читать или отправлять в него некоторые данные.
Однако приложения, с которыми взаимодействует ваше приложение, могут не разрабатываться с использованием той же технологии, что и ваша. Для плавного обмена данными между вашим приложением и каким-либо другим приложением вы можете обмениваться данными в открытом формате, таком как расширяемый язык разметки или 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
и затем печатаем значения на экране.
Если мы запустим действие сейчас, мы увидим вывод следующим образом:
Другие парсеры, используемые для 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» .
Комментарии к этой статье закрыты. У вас есть вопрос о разработке приложений? Почему бы не спросить об этом на наших форумах ?