XML, анализирующий - ElementTree по сравнению с SAX и DOM

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

67
задан Tom Zych 5 September 2018 в 22:50
поделиться

3 ответа

ElementTree намного легче использовать, потому что он представляет дерево XML (в основном) как структуру списков, и атрибуты представлены как словари.

ElementTree нужно намного меньше памяти для деревьев XML, чем DOM (и таким образом быстрее), и парсинг наверху через iterparse сопоставим с SAX. Кроме того, iterparse возвраты частичные структуры, и можно сохранить использование памяти постоянным во время парсинга путем отбрасывания структур, как только Вы обрабатываете их.

ElementTree, как в Python 2.5, имеет только маленький набор функций по сравнению с полноценными библиотеками XML, но это достаточно для многих приложений. Если Вы нуждаетесь в синтаксическом анализаторе проверки или завершаете поддержку XPath, lxml является способом пойти. В течение долгого времени это раньше было довольно нестабильно, но у меня не было проблем с ним с тех пор 2.1.

ElementTree отклоняется от DOM, где узлы имеют доступ к своему родителю и одноуровневым элементам. Обработка фактических документов, а не хранилищ данных является также немного громоздкой, потому что текстовые узлы не рассматривают как фактические узлы. В отрывке XML

<a>This is <b>a</b> test</a>

строка test будет так называемым tail из элемента b.

В целом, я рекомендую ElementTree как значение по умолчанию для всей обработки XML с Python, и DOM или SAX как решения для определенных проблем.

66
ответ дан Torsten Marek 24 November 2019 в 14:43
поделиться

Синтаксический анализ ElementTree () похож на DOM, тогда как iterparse () похож на SAX. По-моему, ElementTree лучше, чем DOM и SAX, в котором это обеспечивает API, легче работать с.

7
ответ дан sanxiyn 24 November 2019 в 14:43
поделиться

ElementTree имеет больше pythonic API. Это также находится в стандартной библиотеке, теперь настолько использующей, это уменьшает зависимости.

я на самом деле предпочитаю lxml, поскольку он имеет API как ElementTree, но имеет также хорошие дополнительные функции и работает хорошо.

7
ответ дан Nikita Kniazev 24 November 2019 в 14:43
поделиться
Другие вопросы по тегам:

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