Другое событие 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));
}
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 как решения для определенных проблем.
Синтаксический анализ ElementTree () похож на DOM, тогда как iterparse () похож на SAX. По-моему, ElementTree лучше, чем DOM и SAX, в котором это обеспечивает API, легче работать с.
ElementTree имеет больше pythonic API. Это также находится в стандартной библиотеке, теперь настолько использующей, это уменьшает зависимости.
я на самом деле предпочитаю lxml, поскольку он имеет API как ElementTree, но имеет также хорошие дополнительные функции и работает хорошо.