Android - разбор каскадных типов из xml - PullRequest
0 голосов
/ 16 октября 2011

Я пытаюсь разобрать каскадные типы (не уверен, что это правильный термин) из XML-файлов.

Что я имею в виду под каскадными типами, так это то, что атрибут ntype элемента xml может быть любым из следующих.

<ntype A> 
     <ntype A:A1>
     <ntype A:A2>
<ntype B>
     <ntype B:B1>
     <ntype B:B2>
...

Это похоже на спецификации layout в файлах android xml, таких как android:layout_width, android:layout_height и т. Д.,

ntype определяет тип файла xml и на основании этого выполняется дальнейшая обработка данных.

В настоящее время я анализирую это, имея все ntype в перечисляемом типе данных, например: (удаляя ":" из ntype)


    public static enum NType {
           A,
           AA1,
           AA2,
           B,
           BB1,
           BB2,
           ...
    }

В парсере я делаю

NType nType = NType.valueof(attributes.getValue("ntype").replace(":","");

Однако, если в файл xml добавлен новый ntype и этого типа нет в enum, приложение вылетает. Я хотел знать, есть ли лучший способ хранения этих каскадных типов данных и как мне добавить поведение по умолчанию, если ntype не существует, чтобы приложение не зависало.

Любая помощь приветствуется.

PS: я немного менее осведомлен в теоретической информатике, и я считаю, что это в основном теоретический вопрос о том, какие / какие / как инструменты из языка программирования следует использовать.

1 Ответ

1 голос
/ 17 октября 2011

Не уверен, что это сработает, так как ваш вопрос немного абстрактен, и я не знаю, каков ваш ntypes или что вам нужно делать при обработке документа.Как насчет этого ...

Вместо того, чтобы создавать статическое перечисление, вы можете выполнить двухэтапную операцию синтаксического анализа и создать коллекцию некоторого вида (возможно, List<String>, хотя другие коллекции могут быть более подходящими).

Короче говоря, я запускаю первый проход и использую метод contains(Object E) коллекции, чтобы посмотреть, содержит ли он уже этот ntype - если нет, то используйте метод add(Object E), чтобы добавить его.Сделайте это для всего документа xml.

Второй проход, обработайте документ так, как вам нужно, но (при условии, что вы хотите получить значение типа int, представляющее тип n), используйте метод collection indexOf(Object E).

Анализируя документ и компилируя все ntypes на первом проходе, вы будете динамически гарантировать, что вы знаете их все без риска встретить неизвестный ntype.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...