JAVA操作XML实例分析
什么是XML?
XML(Extensible Markup Language),可扩展标记语言,是一种用于描述数据的标记语言。XML的优点是简单易学易写,并且可扩展性良好,是一种非常流行的数据传输与存储格式。
什么是DOM?
DOM(Document Object Model),文档对象模型,是一种用于处理XML文档的主流方法。它把整个XML文档当作树形结构进行处理,提供了一系列的API接口来访问XML元素、属性、文本等内容。
什么是SAX?
SAX(Simple API for XML),简单XML应用程序接口,是一种基于事件的XML解析方式,逐行读取XML文件,当读取到XML标签时,触发相应的事件处理器。
JAVA操作XML
Java提供了许多种API用于操纵XML文件,其中常用的有DOM和SAX。
使用DOM操作XML
DOM可以将整个XML文档读取到内存中,然后通过遍历整个文档树来访问文件中的元素、属性、文本等内容。这种方式适用于文档较小的情况。
以下是一个使用DOM读取XML文件的示例代码:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DOMExample {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("example.xml");
Element root = doc.getDocumentElement();
NodeList nodeList = root.getElementsByTagName("book");
for(int i = 0; i < nodeList.getLength(); i++) {
Element book = (Element) nodeList.item(i);
String title = book.getAttribute("title");
String author = book.getElementsByTagName("author").item(0).getTextContent();
String isbn = book.getElementsByTagName("isbn").item(0).getTextContent();
System.out.println(title + " " + author + " " + isbn);
}
}
}
以上代码首先创建了一个DocumentBuilderFactory实例,然后使用该实例创建了一个DocumentBuilder对象,用于读取XML文件。之后调用parse方法来读取XML文件,并通过getDocumentElement方法获取文件的根元素。接着,使用getElementsByTagName方法获取指定标签的所有元素,遍历所有元素并获取其属性和文本内容。
使用SAX操作XML
SAX是基于事件的解析方式,它逐行读取XML文件,当读取到XML标签时,触发相应的事件,从而实现解析XML文件的功能。这种方式适用于文档较大的情况,因为整个文档不会被读取到内存中。
以下是一个使用SAX读取XML文件的示例代码:
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 SAXExample {
public static void main(String[] args) throws Exception {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("example.xml", new DefaultHandler() {
boolean bTitle = false;
boolean bAuthor = false;
boolean bISBN = false;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(qName.equalsIgnoreCase("book")) {
System.out.println("Processing book element...");
} else if(qName.equalsIgnoreCase("title")) {
bTitle = true;
} else if(qName.equalsIgnoreCase("author")) {
bAuthor = true;
} else if(qName.equalsIgnoreCase("isbn")) {
bISBN = true;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if(qName.equalsIgnoreCase("book")) {
System.out.println("End of processing book element.");
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if(bTitle) {
System.out.println("Title: " + new String(ch, start, length));
bTitle = false;
} else if(bAuthor) {
System.out.println("Author: " + new String(ch, start, length));
bAuthor = false;
} else if(bISBN) {
System.out.println("ISBN: " + new String(ch, start, length));
bISBN = false;
}
}
});
}
}
以上代码创建了一个SAXParserFactory实例和一个SAXParser实例,用于读取XML文件。之后通过解析XML文件时的回调函数来处理XML文件。在startElement函数中,判断当前节点的标签名称,并设置对应的标记位(bTitle、bAuthor和bISBN)。在endElement函数中,判断标签是否为book标签。在characters函数中,根据标记位获取相应的文本内容。
总结
DOM和SAX都是用于解析XML文档的API,DOM可以将整个XML文档读取到内存中,适用于文档较小的情况。SAX是基于事件的解析方式,逐行读取XML文件,可以处理文档较大的情况。在开发中,应根据实际情况选择使用DOM还是SAX来解析XML文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA操作XML实例分析 - Python技术站