Практические примеры парсинга XML
В этом разделе мы рассмотрим несколько практических примеров парсинга XML-файлов с использованием Java API, которые были рассмотрены ранее.
Парсинг простого XML-файла
Начнем с простого XML-файла с именем books.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<library>
<book>
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
<year>1925</year>
</book>
<book>
<title>To Kill a Mockingbird</title>
<author>Harper Lee</author>
<year>1960</year>
</book>
</library>
Используя DOM-парсер, мы можем распарсить этот файл и извлечь информацию о книгах:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("books.xml");
NodeList bookNodes = document.getElementsByTagName("book");
for (int i = 0; i < bookNodes.getLength(); i++) {
Node bookNode = bookNodes.item(i);
System.out.println("Title: " + bookNode.getElementsByTagName("title").item(0).getTextContent());
System.out.println("Author: " + bookNode.getElementsByTagName("author").item(0).getTextContent());
System.out.println("Year: " + bookNode.getElementsByTagName("year").item(0).getTextContent());
}
Парсинг сложного XML-файла
Теперь рассмотрим более сложный XML-файл, который включает пространства имен:
<?xml version="1.0" encoding="UTF-8"?>
<library xmlns="http://example.com/library"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<book>
<dc:title>The Catcher in the Rye</dc:title>
<dc:creator>J.D. Salinger</dc:creator>
<dc:date>1951</dc:date>
</book>
<book>
<dc:title>1984</dc:title>
<dc:creator>George Orwell</dc:creator>
<dc:date>1949</dc:date>
</book>
</library>
Для парсинга этого файла и доступа к элементам с пространствами имен можно использовать следующий код:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("books.xml");
NodeList bookNodes = document.getElementsByTagNameNS("http://example.com/library", "book");
for (int i = 0; i < bookNodes.getLength(); i++) {
Node bookNode = bookNodes.item(i);
System.out.println("Title: " + bookNode.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/", "title").item(0).getTextContent());
System.out.println("Author: " + bookNode.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/", "creator").item(0).getTextContent());
System.out.println("Year: " + bookNode.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/", "date").item(0).getTextContent());
}
Понимая эти практические примеры, вы должны теперь хорошо разбираться в том, как парсить XML-файлы с использованием Java API.