#java #android #xml #sax
#java #Android #xml #sax
Вопрос:
У меня есть xml-файл:
<?xml version="1.0" encoding="utf-8" ?>
<list>
<file name="a" size="559393"/>
<file name="b" size="1766945"/>
...
</list>
С помощью SAX-parser мне нужно получить значения атрибутов (в моем случае значения имени и размера всех тегов файла) и записать в коллекцию для дальнейшей работы моей программы.
Как я должен это реализовать? Для каждого файла тегов создать объект с полями name и size и добавить все это в ArrayListObject?
Комментарии:
1. Звучит не так сложно. Просто определите объект
MyFile
с элементами ‘name’ и ‘size’,ArrayList<MyFile>
чтобы поместить туда все и объединить это с синтаксическим анализом XML2. ДА. Надеюсь, используя синтаксический анализатор SAX, вы получаете значения атрибутов name и size. Вы можете создать класс bean / pojo, скажем, здесь
FileInfo
сname
помощью andsize
. При синтаксическом анализе и повторении значений XML вы можете установить эти значения вFileInfo
object и добавить их вArrayList
object. Вы можете использоватьMap
, если ваше имя файла уникально, чтобы избежатьArrayList
итерации для извлечения значений.3. @Vish не могли бы вы объяснить, пожалуйста: «вы можете использовать Map, если ваше имя файла уникально, чтобы избежать итерации ArrayList для извлечения значений»
4. Так
Map
что это коллекция пар ключ-значение. Если имя файла уникально, отображается обновленное значение, остальное будет перезаписано. Надеюсь, я понял следующий код.Map<String, FileInfo> map = new HashMap<String, FileInfo>(); FileInfo fileInfo = new FileInfo(name, size); map.put(name, fileInfo);
Чтобы получить сведения о файле, вам нужно толькоmap.get(name)
.
Ответ №1:
да, у вас уже должен быть объект с атрибутами name и size , и пока вы используете метод start element , сделайте что-то вроде этого.
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("file")) {
String name = attributes.getValue("name");
String size = attributes.getValue("size");
file file = new file (name,size);
list.add(file);
}
}