2009-05-22 4 views
2

Я относительно не знаком с работой с XML и работаю с некоторыми довольно крупными документами, используя javax.xml.parsers.SAXParser.SAX Преждевременный конец анализа?

Дело в том, что информация, которая мне нужна, находится в верхней части XML-файла, и мне не нужно , чтобы проанализировать весь документ. - Каков наилучший способ остановить анализ файла, когда соответствующая информация была идентифицирована?

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

ответ

2

Бросок исключения - единственный способ остановить его. См. Пример this IBM XML tip.

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

2

Вы можете использовать StAX. Это фактически останавливает процесс разбора в любое время, не вызывая каких-либо исключений.

Отъезд:

Http: //www.xml.com/pub/a/2003/09/17/stax.html

Http: //jcp.org/en/jsr/ detail? id = 173

+0

Это лучший способ, так как бросание исключения для управления нормальным потоком выполнения не столь изящно (за исключением случаев, когда нет другого способа сделать это, но так как его следует избегать). «Поток потокового разбора (StAX)» относится к модели программирования, в которой клиентское приложение вызывает методы в библиотеке разбора XML, когда ему необходимо взаимодействовать с XML-информацией. Анализ потокового push (SAX) относится к модели программирования в который анализатор XML отправляет (толкает) XML-данные клиенту, поскольку парсер встречает элементы в XML ». http://java.sun.com/webservices/docs/1.6/tutorial/doc/SJSXP2.html –

1

кажется бросать исключения это лучший способ решения этой проблемы, так как outlined by Tom:

public class MySAXTerminatorException extends SAXException { 
... 
} 

public void startElement (String namespaceUri, String localName, 
          String qualifiedName, Attributes attributes) 
         throws SAXException { 
    if (someConditionOrOther) { 
     throw new MySAXTerminatorException(); 
    } 
    ... 
} 
Смежные вопросы