下面是关于 Java 解析 XML 数据的 4 种方式的完整攻略。
方式1: DOM 解析
DOM 解析方式将整个 XML 文件读入内存并转换为一棵 DOM 树,因此适用于小文件的读取。DOM 解析方式需要先通过 DocumentBuilder 构建一个 Document 对象,最后通过 Document 对象获取相应的节点或属性。示例代码如下:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class DomParserExample {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("example.xml");
NodeList nodeList = document.getElementsByTagName("book");
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getAttributes().getNamedItem("id").getNodeValue());
}
}
}
方式2:SAX 解析
SAX 解析方式不将整个 XML 文件读入内存,而是逐行读取。因此,它适用于大文件的读取和流式数据处理。SAX 解析方式它采用事件驱动机制,对 XML 文档进行事件处理,当解析器读取到 XML 元素的开始、结束以及文本等事件时触发相应的事件处理函数。示例代码如下:
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SaxParserExample {
public static void main(String[] args) throws Exception {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean bId = false;
public void startElement(String uri, String localName, String qName, Attributes attributes) {
if (qName.equalsIgnoreCase("book")) {
String id = attributes.getValue("id");
System.out.println(id);
bId = true;
}
}
public void endElement(String uri, String localName, String qName) {
}
public void characters(char ch[], int start, int length) {
}
};
saxParser.parse("example.xml", handler);
}
}
方式3:JDOM 解析
JDOM 解析是一种基于 DOM 的 XML 解析方式,并且使用起来比 DOM 更加方便。JDOM 解析方式通过自定义 Element、Document 等类对 XML 文件进行解析。示例代码如下:
import java.io.File;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
public class JdomParserExample {
public static void main(String[] args) throws Exception {
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new File("example.xml"));
Element root = document.getRootElement();
for (Element book : root.getChildren("book")) {
System.out.println(book.getAttributeValue("id"));
}
}
}
方式4:DOM4J 解析
DOM4J 是一种功能强大、灵活的 Java 库,支持大量 XML 操作。DOM4J 解析方式操作方式类似于 JDOM。通过添加 dom4j 依赖来使用 DOM4J 解析方式。示例代码如下:
import java.io.File;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4jParserExample {
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("example.xml"));
Element root = document.getRootElement();
for (Iterator<Element> it = root.elementIterator(); it.hasNext(); ) {
Element book = it.next();
System.out.println(book.attributeValue("id"));
}
}
}
以上就是 Java 解析 XML 数据的 4 种方式的完整攻略,其中包括了两条示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 解析XML数据的4种方式 - Python技术站