Существует ли более легкий способ проанализировать XML в Java?

Это - идиома, я всегда раньше получал измененную копию строки, не изменяя оригинал:

(my $newstring = $oldstring) =~ s/foo/bar/g;

В жемчуге 5.14.0 или позже, можно использовать новое /r неразрушающий модификатор замены:

my $newstring = $oldstring =~ s/foo/bar/gr; 

Примечание: вышеупомянутые решения работают без g также. Они также работают с любыми другими модификаторами.

33
задан Kyle Slattery 12 November 2009 в 01:20
поделиться

10 ответов

В Java есть два разных типа процессоров для XML (на самом деле 3, но один странный). У вас есть парсер SAX, а вам нужен парсер DOM. Взгляните на http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser /, чтобы узнать, как использовать парсер DOM. DOM создаст дерево, по которому вы можете легко ориентироваться. SAX лучше всего подходит для больших документов, но DOM намного проще, если он медленнее и требует гораздо большего объема памяти.

24
ответ дан 27 November 2019 в 18:19
поделиться

Написание обработчика SAX - лучший способ. И как только вы это сделаете, вы никогда не вернетесь ни к чему другому. Это быстро, просто и ломается на ходу, не засасывая большие части или не дай бог весь DOM в память.

0
ответ дан 27 November 2019 в 18:19
поделиться

Разбор XML - непростая задача.

Его основная структура - дерево с любым узлом в дереве, способное содержать контейнер, состоящий из массива большего количества деревьев.

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

Задачи синтаксического анализа XML обычно делятся на три категории.

Что можно сделать с "регулярным выражением". Например, вы хотите найти значение первого тега «MailTo» и вас не интересует содержимое каких-либо других тегов.

То, что вы можете проанализировать самостоятельно. Структура xml всегда очень проста, например, корневой узел и десять хорошо известных тегов с простыми значениями.

Все остальное! Несмотря на то, что формат сообщения xml может выглядеть обманчиво простым, самодельные синтаксические анализаторы легко сбиваются с толку из-за дополнительных атрибутов, CDATA и неожиданных дочерних элементов. Полноценные анализаторы XML могут справиться со всеми этими ситуациями. Здесь основной выбор - между потоком или парсером DOM. Если вы собираетесь использовать большинство сущностей / атрибутов, указанных в том порядке, в котором вы хотите их использовать, то анализатор DOM идеален. Если вас интересуют только несколько атрибутов и вы собираетесь использовать их в том порядке, в котором они представлены, если у вас есть ограничения производительности или, если файлы xml имеют большой размер (> 500 МБ), то лучше использовать парсер потока; Механизм обратного вызова требует некоторого времени, но на самом деле его довольно просто запрограммировать, как только вы освоите его.

Полноценные анализаторы XML могут справиться со всеми этими ситуациями. Здесь основной выбор - между потоком или парсером DOM. Если вы собираетесь использовать большинство сущностей / атрибутов, указанных в том порядке, в котором вы хотите их использовать, то анализатор DOM идеален. Если вас интересуют только несколько атрибутов и вы собираетесь использовать их в том порядке, в котором они представлены, если у вас есть ограничения производительности или, если файлы xml имеют большой размер (> 500 МБ), то лучше использовать парсер потока; Механизм обратного вызова требует некоторого времени, но на самом деле его довольно просто запрограммировать, как только вы освоите его.

Полноценные анализаторы XML могут справиться со всеми этими ситуациями. Здесь основной выбор - между потоком или парсером DOM. Если вы собираетесь использовать большинство сущностей / атрибутов, указанных в том порядке, в котором вы хотите их использовать, то анализатор DOM идеален. Если вас интересуют только несколько атрибутов и вы собираетесь использовать их в том порядке, в котором они представлены, если у вас есть ограничения производительности или, если файлы xml имеют большой размер (> 500 МБ), то лучше использовать парсер потока; Механизм обратного вызова требует некоторого времени, но на самом деле его довольно просто запрограммировать, как только вы освоите его.

Если вас интересуют только несколько атрибутов и вы собираетесь использовать их в том порядке, в котором они представлены, если у вас есть ограничения производительности или, если файлы xml имеют большой размер (> 500 МБ), то лучше использовать парсер потока; Механизм обратного вызова требует некоторого времени, но на самом деле его довольно просто запрограммировать, как только вы освоите его.

Если вас интересуют только несколько атрибутов и вы собираетесь использовать их в том порядке, в котором они представлены, если у вас есть ограничения производительности или, если файлы xml имеют большой размер (> 500 МБ), то лучше использовать парсер потока; Механизм обратного вызова требует некоторого времени, но на самом деле его довольно просто запрограммировать, как только вы освоите его.

-3
ответ дан 27 November 2019 в 18:19
поделиться

По моему мнению, вам следует использовать парсер SAX, потому что: - Быстрый - вы можете контролировать все в XML-документе

Вы будете уделять кодированию больше времени, но только один раз, потому что вы создадите шаблон кода для синтаксического анализа XML

Во втором случае вы только редактируете содержание изменений.

Удачи !

2
ответ дан 27 November 2019 в 18:19
поделиться

Вы также можете использовать Castor для преобразования XML в компоненты Java. Я использовал его раньше, и он работает как амулет.

0
ответ дан 27 November 2019 в 18:19
поделиться

Начиная с Java 5, в SDK есть библиотека XPath. См. это руководство для ознакомления с ним.

2
ответ дан 27 November 2019 в 18:19
поделиться

Ознакомьтесь с этой статьей, чтобы узнать о способах обработки XML на Android. Может быть, стиль DOM или XML Pull больше подходит вашему стилю

Работа с XML на Android

12
ответ дан 27 November 2019 в 18:19
поделиться

Пару недель назад я выбил небольшую библиотеку (оболочку вокруг javax.xml.stream.XMLEventReader ), позволяющую анализировать XML аналогично рукописному синтаксическому анализатору с рекурсивным спуском.Исходный код доступен на github , а простой пример использования приведен ниже. К сожалению, Android не поддерживает этот API, но он очень похож на API XmlPullParser , который поддерживается, и перенос не займет слишком много времени.

accept("tilesets");
    while (atTag("tileset")) {
        String filename = attrib("file");
        File tilesetFile = new File(filename);
        if (!tilesetFile.isAbsolute()) {
            tilesetFile = new File(FilenameUtils.concat(file.getParent(), filename));
        }
        int tilesize = Integer.valueOf(attrib("tilesize"));
        Tileset t = new Tileset(tilesetFile, tilesize);
        t.setID(attrib("id"));
        tilesets.add(t);

        accept();
        close();
    }
close();

expect("map");

int width       = Integer.valueOf(attrib("width"));
int height      = Integer.valueOf(attrib("height"));
int tilesize    = Integer.valueOf(attrib("tilesize"));
0
ответ дан 27 November 2019 в 18:19
поделиться

Попробуйте http://simple.sourceforge.net , это структура сериализации и связывания XML в Java, полностью совместимая с Android и очень легкий, 270 КБ и никаких зависимостей.

13
ответ дан 27 November 2019 в 18:19
поделиться

На мой взгляд, использование XPath для разбора XML может быть самым простым подходом к кодированию. Вы можете воплотить логику извлечения узлов из XML-документа в одном выражении, вместо того чтобы писать код для обхода объектного графа документа.

Замечу, что в другом опубликованном ответе на этот вопрос уже предлагалось использовать XPath. Но пока не для вашего проекта Android. На данный момент класс синтаксического анализа XPath еще не поддерживается ни в одном релизе Android (хотя пространство имен javax.xml определено в Dalvik JVM, что может обмануть вас, как и меня поначалу).

Включение класса XPath в Android - это текущий рабочий элемент на поздней стадии. (Он тестируется и отлаживается в Google, пока я пишу это). Вы можете отслеживать статус добавления XPath в Davlik здесь: http://code.google.com/p/android/issues/detail?id=515

(Раздражает то, что вы не можете предположить, что вещи, поддерживаемые в большинстве Java VM, уже включены в Android Dalvik VM.)

Другим вариантом, в ожидании официальной поддержки Google, является JDOM, который в настоящее время заявляет о совместимости с Dalvik VM, а также о поддержке XPath (в бета-версии). (Я не проверял это; я просто повторяю текущие заявления с их веб-сайта)

.
1
ответ дан 27 November 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: