package com.baeldung.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class SaxParserMain { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); BaeldungHandler baeldungHandler = new BaeldungHandler(); saxParser.parse("xml/src/main/resources/sax/baeldung.xml", baeldungHandler); System.out.println(baeldungHandler.getWebsite()); } public static class BaeldungHandler extends DefaultHandler { private static final String ARTICLES = "articles"; private static final String ARTICLE = "article"; private static final String TITLE = "title"; private static final String CONTENT = "content"; private Baeldung website; private StringBuilder elementValue; @Override public void characters(char[] ch, int start, int length) throws SAXException { if (elementValue == null) { elementValue = new StringBuilder(); } else { elementValue.append(ch, start, length); } } @Override public void startDocument() throws SAXException { website = new Baeldung(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { switch (qName) { case ARTICLES: website.setArticleList(new ArrayList<>()); break; case ARTICLE: website.getArticleList().add(new BaeldungArticle()); break; case TITLE: elementValue = new StringBuilder(); break; case CONTENT: elementValue = new StringBuilder(); break; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { switch (qName) { case TITLE: latestArticle().setTitle(elementValue.toString()); break; case CONTENT: latestArticle().setContent(elementValue.toString()); break; } } private BaeldungArticle latestArticle() { List articleList = website.getArticleList(); int latestArticleIndex = articleList.size() - 1; return articleList.get(latestArticleIndex); } public Baeldung getWebsite() { return website; } } public static class Baeldung { private List articleList; public void setArticleList(List articleList) { this.articleList = articleList; } public List getArticleList() { return this.articleList; } } public static class BaeldungArticle { private String title; private String content; public void setTitle(String title) { this.title = title; } public String getTitle() { return this.title; } public void setContent(String content) { this.content = content; } public String getContent() { return this.content; } } }