Разбор больших файлов XML с использованием SAX-парсера (пропустите некоторые строки / теги)

В настоящее время я занимаюсь разработкой приложения, которое извлекает данные из Интернета с использованием SAX. Я использовал его раньше для анализа простых XML-файлов, таких как Google Weather API. Тем не менее, сайты, которые меня интересуют, поднимают парсинг на новый уровень. Страница огромна и выглядит грязно. Мне нужно только получить некоторые конкретные строки; остальное для меня бесполезно.
Можно ли пропустить эти бесполезные строки / теги, или мне нужно идти шаг за шагом?

7
задан Nick Stauner 12 July 2014 в 09:29
поделиться

7 ответов

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

1
ответ дан 6 December 2019 в 22:59
поделиться

Вы можете попробовать использовать XPath, который будет использовать SAX за сценой для анализа вашего xml. Обратной стороной является то, что XML будет анализироваться при каждом вызове метода оценки Xpath.

1
ответ дан 6 December 2019 в 22:59
поделиться

Если вы хотите читать определенные теги, тогда парсер DOM намного быстрее, чем парсер SAX .. Парсер SAX полезен, если вы хотите анализировать большие файлы XML ..

1
ответ дан 6 December 2019 в 22:59
поделиться

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

1
ответ дан 6 December 2019 в 22:59
поделиться

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

Пропуск узлов с помощью sax

Это включает переключение ContentHandlers на XMLReader. Когда вы читаете перенос XML-документа, который хотите пропустить, вы просто меняете ContentHandler, который ничего не делает с событиями. Когда достигается конец секции, которую нужно пропустить, он передает управление обратно обработчику содержимого, который вы использовали для обработки содержимого XML.

1
ответ дан 6 December 2019 в 22:59
поделиться

Мне нравится обычный варочный котел. Это позволяет вам определять правила для определенных тегов. Правило выполняется только при обнаружении тега.

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

Я использую его для анализа всех моих файлов конфигурации.

Посетите варочный котел http://commons.apache.org/digester/

4
ответ дан 6 December 2019 в 22:59
поделиться

Да, вы можете это сделать, просто игнорируйте теги, которые вам не интересны. Но учтите, что для этого нужно будет проанализировать весь документ (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.
}
2
ответ дан 6 December 2019 в 22:59
поделиться
Другие вопросы по тегам:

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