Как сохранить данные при синтаксическом анализе XML?

#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> чтобы поместить туда все и объединить это с синтаксическим анализом XML

2. ДА. Надеюсь, используя синтаксический анализатор SAX, вы получаете значения атрибутов name и size. Вы можете создать класс bean / pojo, скажем, здесь FileInfo с name помощью and size . При синтаксическом анализе и повторении значений 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);
        }
      }