XML (расширяемый язык разметки) — популярный формат хранения структурированных данных и обмена ими. Для эффективной работы с данными XML разработчики часто используют библиотеки синтаксического анализа XML. В этой статье мы рассмотрим две широко используемые библиотеки синтаксического анализа XML: Xerces и JAXB. Мы углубимся в различные методы, предоставляемые этими библиотеками, сопровождаемые примерами кода, чтобы помочь вам понять, как эффективно анализировать XML-данные.
- Библиотека Xerces:
Xerces — это высокопроизводительный анализатор XML с открытым исходным кодом, разработанный Apache Software Foundation. Он предоставляет полный набор API-интерфейсов для анализа, манипулирования и проверки XML-документов.
а. Анализ DOM (объектной модели документа).
Анализ DOM создает в памяти древовидное представление всего XML-документа, что позволяет легко перемещаться и манипулировать элементами XML. Вот пример анализа XML-файла с использованием Xerces DOM:
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
public class XercesDOMParserExample {
public static void main(String[] args) throws Exception {
DOMParser parser = new DOMParser();
parser.parse("example.xml");
Document document = parser.getDocument();
NodeList nodeList = document.getElementsByTagName("book");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
System.out.println(node.getTextContent());
}
}
}
б. Синтаксический анализ SAX (простой API для XML).
Разбор SAX — это управляемый событиями подход, при котором XML-документы обрабатываются последовательно. Он эффективно использует память и подходит для больших файлов XML. Вот пример анализа XML-файла с помощью Xerces SAX:
import org.apache.xerces.parsers.SAXParser;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
public class XercesSAXParserExample {
public static void main(String[] args) throws Exception {
SAXParser parser = new SAXParser();
parser.setContentHandler(new DefaultHandler() {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) {
System.out.println("Element: " + qName);
}
@Override
public void characters(char[] ch, int start, int length) {
String text = new String(ch, start, length).trim();
if (!text.isEmpty()) {
System.out.println("Text: " + text);
}
}
});
parser.parse("example.xml");
}
}
- Библиотека JAXB:
JAXB (архитектура Java для привязки XML) — это Java API для сопоставления объектов Java с представлениями XML и наоборот. Это упрощает привязку данных XML и устраняет необходимость ручного анализа и сериализации.
а. Демаршалинг XML в объекты Java:
JAXB позволяет без особых усилий преобразовывать данные XML в объекты Java. Вот пример демаршаллинга XML-файла с помощью JAXB:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.File;
public class JAXBUnmarshallingExample {
public static void main(String[] args) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(Bookstore.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Bookstore bookstore = (Bookstore) unmarshaller.unmarshal(new File("example.xml"));
for (Book book : bookstore.getBooks()) {
System.out.println(book.getTitle());
}
}
}
б. Маршалинг объектов Java в XML:
JAXB также позволяет преобразовывать объекты Java в представление XML. Вот пример маршаллинга объектов Java в XML с использованием JAXB:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.File;
public class JAXBMarshallingExample {
public static void main(String[] args) throws JAXBException {
Bookstore bookstore = new Bookstore();
// populate the bookstore object
JAXBContext jaxbContext = JAXBContext.newInstance(Bookstore.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(bookstore, new File("example.xml"));
}
}