SAX Parser: Как прочитать XML-файл на Java

Sax parser  Sax является самым популярным парсером последней версии DOM, в отличие от DOM, Sax работает по-другому, он не загружает XML в память перед его обработкой и не создает никаких типов XML-объектов. SAX является хорошим выбором для разбора большого xml-файла, потому что он потребляет меньше памяти.

SAX Parser использует три метода для разбора и чтения xml:

startElement(): Всякий раз, когда SAX-парсер встречает открывающий тег '<', он вызывает startElement().

endElement(): at  всякий раз, когда SAX-парсер встречает закрывающий тег '>', он вызывает startElement().

characters(): Этот метод вызывается, когда SAX-парсер находит текст между открывающим и закрывающим тегом

Эти три метода отвечают за разбор xml, программист использует их для разбора, чтения или извлечения информации из кода.

Извлечь текст из xml-файла в java

Для тестирования java-кода, Вы должны создать простой XML-файл, который вы будете использовать для отображения его содержимого в консоли:

 
< Контакты>
< person id="1">
< Имя> кодировщик
< Имя> Ява
< Мобильный> 054124587
< Электронная почта> codeurjava@gmail.com < руб./>
< person id="2">
< Имя> кодировщик
< Имя> С++
< Мобильный> 062148795
< Электронная почта> codeurcplusplus@gmail.com < руб./>

Код java:

import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class ReadFileXML{

public static void main(String argv[]) {

try {
//Получаем конфигурацию sax parser
SAXParserFactory spfactory = SAXParserFactory.newInstance();
//Получаем экземпляр объекта parser
SAXParser saxParser = spfactory.newSAXParser();

/*все три метода объявлены в DefaltHandler /> corp DefaultHandler handler = new DefaultHandler() {

boolean bnom = false;
логическое значение bprefirst name = false;
логическое значение bmobile = false;
логическое значение bemail = false;

/*этот метод вызывается всякий раз, когда парсер встречает
открывающий тег '<' */
public void startElement(String uri, String localName,
String qName,Attributes attributes) throws SAXException{

if (qName.equalsIgnoreCase("name")) {
bnom = true;
}

if (qName.equalsIgnoreCase("firstname")) {
bfirstname = true;
}

if (qName.equalsIgnoreCase("mobile")) {
bmobile = true;
}

if (qName.equalsIgnoreCase("email")) {
bemail = true;
}
}

/*этот метод вызывается всякий раз, когда парсер встречает
закрывающий тег '>' */
public void endElement(String uri, String localName,
String qName) выбрасывает SAXException {

if (qName.equalsIgnoreCase("name")) {
bnom = false;
}

if (qName.equalsIgnoreCase("firstname")) {
bfirstname = false;
}

if (qName.equalsIgnoreCase("mobile")) {
bmobile = false;
}

if (qName.equalsIgnoreCase("email")) {
bemail = false;
}
}

/*выводит данные, хранящиеся между '<' и '>' */
public void characters(char ch[], int start,
int length) выбрасывает SAXException {

if (bnom) {
System.out.println("Name: " +
new String(ch, начало, длина));
bnom = false;
}

if (bprename) {
System.out.println("Имя: " +
new String(ch, start, length));
bимя = ложь;
}

if (bmobile) {
System.out.println("Mobile : " +
new String(ch, start, length));
bmobile = false;
}

if (bemail) {
System.out.println("Email : " +
new String(ch, start, length));
bemail = false;
}
}

};

saxParser.parse("exemple.xml", обработчик);

} catch (Исключение e) {
e.printStackTrace();
}
}
}
Execution:

Фамилия: coder
Имя: java
Mobile: 054124587
Email: codeurjava@gmail.com

Фамилия: coder
Имя: c++
Mobile: 062148795
Email: codeurcplusplus@gmail.com