Java中常用的四种XML解析技术包括DOM、SAX、JDOM和DOM4J。每种技术都有自己的特点和适用场景。下面分别进行详细讲解:
DOM
DOM(Document Object Model)是一种W3C推荐的XML解析技术,能够将整个XML文档加载到内存中,并以树形结构的形式表示XML文档的各个元素节点,因此能够轻松进行对XML文档的读写操作。
DOM解析XML文件的基本步骤
//1.创建DocumentBuilderFactory对象,并使用该对象创建DocumentBuilder对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
//2.加载XML文件,得到代表XML文件的Document对象
Document document = builder.parse("path/to/xml/file");
//3.查询指定的节点,并进行操作
NodeList list = document.getElementsByTagName("elementName");
for(int i = 0; i < list.getLength(); i++){
Node node = list.item(i);
//进行操作
}
示例
假设我们有如下的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="101">
<name>Tom</name>
<age>18</age>
</student>
<student id="102">
<name>Jerry</name>
<age>17</age>
</student>
<student id="103">
<name>Lucy</name>
<age>19</age>
</student>
</students>
我们可以使用DOM解析技术读取并输出XML文件中所有学生的姓名和年龄信息:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("path/to/xml/file");
NodeList list = document.getElementsByTagName("student");
for(int i = 0; i < list.getLength(); i++){
Element student = (Element) list.item(i);
String name = student.getElementsByTagName("name").item(0).getTextContent();
String age = student.getElementsByTagName("age").item(0).getTextContent();
System.out.println("姓名:" + name + ",年龄:" + age);
}
输出结果为:
姓名:Tom,年龄:18
姓名:Jerry,年龄:17
姓名:Lucy,年龄:19
SAX
SAX(Simple API for XML)是一种基于事件驱动的XML解析技术,通过注册事件处理器来处理XML文档,适用于对大型XML文档进行解析。
SAX解析XML文件的基本步骤
//1.创建SAXParserFactory对象,并使用该对象创建SAXParser对象
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
//2.创建事件处理器,并注册到SAXParser中
DefaultHandler handler = new DefaultHandler();
parser.setContentHandler(handler);
//3.解析XML文件
parser.parse("path/to/xml/file");
示例
我们可以使用SAX解析技术读取并输出XML文件中所有学生的姓名和年龄信息:
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler(){
String name = "";
String age = "";
boolean isName = false;
boolean isAge = false;
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(qName.equals("name")){
isName = true;
}
if(qName.equals("age")){
isAge = true;
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
if(isName){
name = new String(ch, start, length);
isName = false;
}
if(isAge){
age = new String(ch, start, length);
isAge = false;
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if(qName.equals("student")){
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
};
parser.setContentHandler(handler);
parser.parse("path/to/xml/file");
输出结果与DOM示例中一致。
JDOM
JDOM是一种基于Java语言开发的XML解析技术,可以轻松将XML文档转换为Java对象,并且接口清晰易用,适合对XML文档进行操作。
JDOM解析XML文件的基本步骤
//1.创建SAXBuilder对象
SAXBuilder builder = new SAXBuilder();
//2.加载XML文件,得到代表XML文件的Document对象
Document document = builder.build("path/to/xml/file");
//3.查询指定的节点,并进行操作
Element root = document.getRootElement();
List<Element> list = root.getChildren("elementName");
for(Element element : list){
//进行操作
}
示例
我们可以使用JDOM解析技术读取并输出XML文件中所有学生的姓名和年龄信息:
SAXBuilder builder = new SAXBuilder();
Document document = builder.build("path/to/xml/file");
Element root = document.getRootElement();
List<Element> list = root.getChildren("student");
for(Element student : list){
String name = student.getChildText("name");
String age = student.getChildText("age");
System.out.println("姓名:" + name + ",年龄:" + age);
}
输出结果与前两个示例一致。
DOM4J
DOM4J是一种基于Java语言开发的XML解析技术,可以轻松将XML文档转换为Java对象,并且相对于JDOM更加灵活,并且能够提供XPath支持,支持XML的进一步操作。
DOM4J解析XML文件的基本步骤
//1.创建SAXReader对象
SAXReader reader = new SAXReader();
//2.加载XML文件,得到代表XML文件的Document对象
Document document = reader.read("path/to/xml/file");
//3.查询指定的节点,并进行操作
List<Element> list = document.selectNodes("//elementName");
for(Element element : list){
//进行操作
}
示例
我们可以使用DOM4J解析技术读取并输出XML文件中所有学生的姓名和年龄信息:
SAXReader reader = new SAXReader();
Document document = reader.read("path/to/xml/file");
List<Element> list = document.selectNodes("//student");
for(Element student : list){
String name = student.elementText("name");
String age = student.elementText("age");
System.out.println("姓名:" + name + ",年龄:" + age);
}
输出结果与前三个示例一致。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中四种XML解析技术 - Python技术站