В Java XML представлен объектом org.w3c.dom.Document. В этом учебнике по XML мы научимся –
- Преобразовать XML-строку в XML-документ
- Преобразовать содержимое XML-файла в XML-документ
1. Преобразование строки в XML-документ
Для преобразования XML-строки в XML Dom нам понадобятся следующие классы:
- javax.xml.parsers.DocumentBuilder : определяет API для получения экземпляров XML DOM Document из XML-контента из различных входных источников. Этими входными источниками являются InputStreams, Files, URL и SAX InputSources.
- javax.xml.parsers.DocumentBuilderFactory : определяет API фабрики, который позволяет приложениям получать парсер(DocumentBuilder), создающий деревья объектов DOM из содержимого XML.
- org.w3c.dom.Document : представляет собой весь XML DOM. Концептуально, это корень дерева документа, и обеспечивает доступ к данным документа ниже по дереву, через методы фабрики.
- java.io.StringReader : создает поток из содержимого String. DocumentBuilder использует этот поток для чтения содержимого XML для анализа.
import java.io.StringReader;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.InputSource;public class ConvertStringToXML {public static void main(String[] args) {final String xmlStr = "<employees>" +" <employee id=\"101\">" +" <name>Lokesh Gupta</name>" +" <title>Author</title>" +" </employee>" +" <employee id=\"102\">" +" <name>Brian Lara</name>" +" <title>Cricketer</title>" +" </employee>" +"</employees>";//Use method to convert XML string content to XML Document objectDocument doc = convertStringToXMLDocument(xmlStr);//Verify XML document is build correctlySystem.out.println("Root Node : " + doc.getFirstChild().getNodeName());NodeList nodeList = doc.getElementsByTagName("employee");for(int itr = 0; itr < nodeList.getLength(); itr++) {Node node = nodeList.item(itr);System.out.println("\nNode Name : " + node.getNodeName());if(node.getNodeType() == Node.ELEMENT_NODE) {Element eElement =(Element) node;System.out.println("Name: "+ eElement.getElementsByTagName("name").item(0).getTextContent());System.out.println("Title: "+ eElement.getElementsByTagName("title").item(0).getTextContent());}}}private static Document convertStringToXMLDocument(String xmlString) {//Parser that produces DOM object trees from XML contentDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//API to obtain DOM Document instanceDocumentBuilder builder = null;try {//Create DocumentBuilder with default configurationbuilder = factory.newDocumentBuilder();//Parse the content to Document objectDocument doc = builder.parse(new InputSource(new StringReader(xmlString)));return doc;} catch(Exception e) {e.printStackTrace();}return null;}}
Вывод программы:
Root Node : employeesNode Name : employeeName: Lokesh GuptaTitle: AuthorNode Name : employeeName: Brian LaraTitle: Cricketer
2. Преобразование XML-файла в XML-документ
Чтобы получить XML DOM из XML-файла, вместо передачи XML-строки в DocumentBuilder передайте путь к файлу, чтобы анализатор мог напрямую прочитать содержимое файла.
У нас есть файл employees.xml с XML-содержимым, который мы прочитаем, чтобы получить XML-документ.
<сотрудники><сотрудник id="101"><name>Локеш Гупта</name><title>Автор</title></сотрудник><сотрудник id="102"><name>Брайан Лара</name><title>Игрок в крикет</title></сотрудник></сотрудники>
import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;public class StringtoXMLExample{public static void main(String[] args){final String xmlFilePath = "employees.xml";//Use method to convert XML string content to XML Document objectDocument doc = convertXMLFileToXMLDocument( xmlFilePath );//Verify XML document is build correctlySystem.out.println(doc.getFirstChild().getNodeName());}private static Document convertXMLFileToXMLDocument(String filePath){//Parser that produces DOM object trees from XML contentDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//API to obtain DOM Document instanceDocumentBuilder builder = null;try{//Create DocumentBuilder with default configurationbuilder = factory.newDocumentBuilder();//Parse the content to Document objectDocument doc = builder.parse(new File(filePath));return doc;}catch(Exception e){e.printStackTrace();}return null;}}
Пишите мне свои вопросы в комментариях.