XML Parsing in Android using XmlPullParser
In android, the XMLPullParser interface provides the functionality to parse the XML files in android applications. The XMLPullParser is a simple and efficient parser method to parse the XML data when compared to other parser methods such as DOM Parser and SAX Parser. The XMLPullParser has a method next() that provides access to high-level parsing events. The next() method will advance the parser to the next event. The following are the series of events available in XMLPullParser, which will be seen by the next() method.
- START_DOCUMENT: The parser starts processing the XML document.
- START_TAG: In this event, we can get the start tag in XML.
- TEXT: In this event, we can read the text content using the getText() method.
- END_TAG: An end tag was read.
- END_DOCUMENT: No more events are available.
Note that we are going to implement this project using the Kotlin language. One may also perform XML Parsing in another two ways. Please refer to the below articles:
What we are going to do?
XMLPullParser scrutinizes an XML file with a series of events, such as START_DOCUMENT, START_TAG, TEXT, END_TAG, and END_DOCUMENT to parse the XML document. To read and parse XML files using XMLPullParser in android, one needs to create an instance of XMLPullParserFactory, and XMLPullParser.
Approach
To parse an XML file using a DOM parser in Android, we follow the following steps:
Step 1: Create a New Project
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Kotlin as the programming language.
Step 2: Create an assets folder
Create an assets folder under the main folder in the Project Layout. Create an Android Resource File in this folder, where we shall put the information in the form of XML. Name this file as userdetails.xml. For doing so refer to the following steps:
Click on Project as shown on the left side of the below image.
Expand until you find the main folder, right-click on it, go to New > Folder > Assets Folder
Then just click on the Finish button.
Now the asset folder is created successfully. Right-Click on the Assets Folder > New > Android Resource FIle
Give it name Information, change type to XML, and finish.
Note: Sometimes, right-clicking on the Assets folder and creating an Android Resource File creates a file in the res folder. If this happens, cut our file and paste it directly into the assets folder. This happens due to some internal settings.
Источник
Работа с 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 :
Источник
XML Parsing in Android using SAX Parser
Generally, XML (Extensible Mark-up Language) is a commonly used data exchange format to interchange servers’ data. In Android, SAX stands for Simple API for XML and is a widely used API for XML parsing. Like the DOM parser, the SAX parser is also used to perform in-memory operations to parse the XML document, but it consumes less memory than the DOM parser. The main advantage of a SAX parser over a DOM parser is that one can instruct the SAX parser to stop midway through a document without losing any collected data. The XML file that contains the information to be extracted includes the following four main components:
- Prolog: The XML file will start with a prolog. Prolog contains the information about a file, which is available in the first line.
- Events: Events such as document start and end, tag start and end, etc. are contained in the XML file
- Text: It is a simple text present in between the opening and closing XML tag elements.
- Attributes: They are the additional properties of a tag present within the label.
Note that we are going to implement this project using the Kotlin language. One may also perform XML Parsing in another two ways. Please refer to the below articles:
What we are going to do?
- We need to have an XML file with some information so that we would make one. Place this file under the assets folder. This file is called and would be parsed.
- We want to show this data in the form of a list to implement a ListView.
- SAX parser scrutinizes an XML file character by character, and translates the XML file into a series of events, such as startElement(), endElement() and characters().
- A ContentHandler object will process these events to perform the appropriate action. The parse() method will send the events to the content object to deals with them.
- Create an instance of SAXParserFactory, SAXParser, and DefaultHandler objects in android applications to read and parse the XML data using SAX parser in Android.
- Using a ListAdapter, the data is sent to the ListView where it is displayed on the screen.
Approach
To parse an XML file using a SAX parser in Android, follow the following steps:
Step 1: Create a New Project
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Kotlin as the programming language.
Step 2: Create an assets folder
Create an assets folder under the main folder in the Project Layout. Create an Android Resource File in this folder, where we shall put the information in the form of XML. Name this file as userdetails.xml. For doing so refer to the following steps:
Click on Project as shown on the left side of the below image.
Expand until you find the main folder, right-click on it, go to New > Folder > Assets Folder
Then just click on the Finish button.
Now the asset folder is created successfully. Right-Click on the Assets Folder > New > Android Resource FIle
Give it name Information, change type to XML, and finish.
Note: Sometimes, right-clicking on the Assets folder and creating an Android Resource File creates a file in the res folder. If this happens, cut our file and paste it directly into the assets folder. This happens due to some internal settings.
Источник
Ошибка установки: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?
Я разрабатываю небольшое приложение, в котором перечислены все приложения, присутствующие / установленные на устройстве Android. Но я получаю ошибку ниже, пока я пытаюсь запустить код.
Ошибка установки: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
Пожалуйста, помогите мне разобраться с этой ошибкой.
Название действия должно иметь префикс «.». В вашем файле манифеста.
Это может быть еще одна причина. Атрибут
Всегда следует начинать с точки, например:
У меня была эта ошибка, потому что у меня были заглавные буквы в имени моего пакета, как это
После того, как я изменил его на что-то вроде
Код ошибки INSTALL_PARSE_FAILED_MANIFEST_MALFORMED возвращается PackageParser.java, когда он обнаруживает какое-либо большое количество ошибок в файле manifest.xml.
Чтобы изолировать ошибку, посмотрите в logcat (когда вы выполните команду adb install foo.apk). В проблеме, с которой я столкнулся, logcat содержал:
В четвертой строке выше вы можете видеть, что PackageParser жалуется, что строка # 214 файла manifest.xml « не включает атрибут полномочий» . См. Список ниже всех случаев в PackageParser, который возвращает этот код ошибки. (PackageParser – единственный класс, который создает код ошибки PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)
В моем случае сообщение « не включает атрибут полномочий» создается по строке 2490 PackagerParser.java в функции parseProvider, вызванной parseApplication.
Из 4.1.1-версии фреймворков / base / core / java / android / content / pm / PackageParser.java в этих строках в этих методах ссылаются PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED. Если за номером строки исходного кода следует строка с кавычками, которая является сообщением, напечатанным в logcat. Если за номером строки следует выражение Java, которое является кодом, который вызвал возврат этого кода ошибки, чтобы эта функция была исследована, чтобы узнать, что вызвало сообщение об ошибке. В нескольких случаях я не мог изолировать причину ошибки к одному вызову метода.
Прискорбно, что вам нужно совать в лог-кате и источник, чтобы выяснить, что вызывает проблему.
Проверьте имя своей деятельности в файле манифеста
Или имя пакета в основной деятельности / классе
У меня такая же проблема, но когда я вызываю процесс следующим образом:
Когда я перехожу к:
Все начинает работать.
Я столкнулся с той же проблемой, что и раньше, в андроидных документах они сказали, что если вы не используете «:» в качестве префикса в android:process вы должны использовать строчную букву, но они никогда не говорили об этом, тогда это должно быть Пакет как имя процесса, например com.company.app.services.MyService
Любое имя, такое как android:name , android:process должно быть в виде имени пакета: начинается с a..z , в сочетании с другими . , Не заканчивайтесь . …
Моя проблема была в том, что я написал (обратите внимание на – против _):
Под действием. Это может быть причиной вашей проблемы.
Получил ту же ошибку! Имел пустой тег разрешения, и это вызывало проблему!
Я столкнулся с той же проблемой после добавления локализации
Строка @string/version_name случайно перешла в один из новых добавленных локализованных строковых файлов (она появилась только в новых файлах). После проверки всех локализаций и удаления @string/version_name из каждого файла, кроме русского языка, все снова работало
Должны быть определены ПЕРЕД
У меня была эта ошибка, потому что код ниже
Когда я изменил android:mimeType=»*» на android:mimeType=»*/*» исправил эту ошибку.
Прочтите журналы устройств Android, чтобы диагностировать эту ошибку. Ожидайте строку «W / PackageParser», объясняющую проблему.
Если вы используете multidex в манифесте, он должен быть добавлен со значением или ресурсом. Подобно..
Затем очистите проект и переустановите приложение.
Могут быть другие файлы, которые были искажены, но не выделены в среде IDE, например res / values / strings, которые манифест может ссылаться на такие вещи, как метки.
Моя проблема заключалась в следующем:
Я указывал свои права следующим образом, и он не работал.
Он отлично работал, когда я изменил его следующим образом:
У меня была эта ошибка, потому что у меня была строка ниже.
После того, как я изменил его на
После борьбы с этой проблемой я узнал, что все значения, которые используются как значение строкового ресурса (aka @ string /) в манифестах (из библиотек, которые вы используете), не могут быть частью strings.xml локализаций , Пример: если файл манифеста с использованием @ string / app_name, определение string / app_name разрешено только в ваших значениях по умолчанию / strings.xml, а не в альтернативном файле string.xml, который вы предоставляете для локализации. Надеюсь, это поможет..
У меня была такая же ошибка. У меня не было символа верхнего регистра в моем названии пакета / приложения и очистка проекта, а другие решения также не помогли мне. Ведь я создал новый проект и копировал свои материалы на новый шаг за шагом и проверял, всплывает ли проблема. В конце концов, у меня был хороший проект без ошибок без какой-либо избыточности. Иногда трудно найти источник этой ошибки, поэтому проще воспользоваться другим подходом.
Надеюсь, это поможет кому-то!
Я столкнулся с этой ошибкой, когда я включил класс Application в неправильный пакет!
В моем случае я имел в виду значок с таким атрибутом:
Я использую этот атрибут в нескольких местах, но кажется, что он не работает в манифесте.
Активная папка с именами имен должна быть маленькими буквами, не используйте заглавные буквы для имени папки активности … ее всегда лучше использовать маленькие буквы.
Источник