В настоящее время я занимаюсь разработкой приложения, которое извлекает данные из Интернета с использованием SAX. Я использовал его раньше для анализа простых XML-файлов, таких как Google Weather API. Тем не менее, сайты, которые меня интересуют, поднимают парсинг на новый уровень. Страница огромна и выглядит грязно. Мне нужно только получить некоторые конкретные строки; остальное для меня бесполезно.
Можно ли пропустить эти бесполезные строки / теги, или мне нужно идти шаг за шагом?
Да, вы можете пропустить. Просто определите те теги, которые вам нужны, и он будет получать значения только этих тегов.
Вы можете попробовать использовать XPath, который будет использовать SAX за сценой для анализа вашего xml. Обратной стороной является то, что XML будет анализироваться при каждом вызове метода оценки Xpath.
Если вы хотите читать определенные теги, тогда парсер DOM намного быстрее, чем парсер SAX .. Парсер SAX полезен, если вы хотите анализировать большие файлы XML ..
Вы можете попробовать комбинацию TagSoup для создания анализируемого XML-документа и XPath для получение интересных частей.
Стратегию использования SAX для пропуска/игнорирования тегов см. в моем ответе на аналогичный вопрос:
Это включает переключение ContentHandlers на XMLReader. Когда вы читаете перенос XML-документа, который хотите пропустить, вы просто меняете ContentHandler, который ничего не делает с событиями. Когда достигается конец секции, которую нужно пропустить, он передает управление обратно обработчику содержимого, который вы использовали для обработки содержимого XML.
Мне нравится обычный варочный котел. Это позволяет вам определять правила для определенных тегов. Правило выполняется только при обнаружении тега.
Digester построен на основе sax и, следовательно, имеет все функции sax плюс специфичность, которая требуется для выборочного синтаксического анализа определенных тегов. Он также использует стек, который заполняется новыми элементами при обнаружении соответствующего тега и выталкивается, когда элемент заканчивается.
Я использую его для анализа всех моих файлов конфигурации.
Посетите варочный котел http://commons.apache.org/digester/
Да, вы можете это сделать, просто игнорируйте теги, которые вам не интересны. Но учтите, что для этого нужно будет проанализировать весь документ (DefaultHandler impl)
public startElement(String uri, String localName,
String qName, Attributes attributes) {
if(localName.equals("myInterestingTag") {
// do your thing....
}
}
public void endElement(String uri, String localName, String qName) {
if(localName.equals("myInterestingTag") {
// do your thing....
}
}
public void characters(char[] ch, int start, int length) {
// if parsing myinteresting tag... do some stuff.
}