Java常用XML解析器的使用
XML(eXtensible Markup Language)是一种可以存储和传输数据的标记语言,也是数据交换的重要格式。Java提供了许多支持XML解析的工具,本文将介绍Java常用的XML解析器的使用。
Java常用的XML解析器
Java常用的XML解析器有DOM(Document Object Model)、SAX(Simple API for XML)、JDOM(Java Document Object Model)和StAX(Streaming API for XML)等。
DOM
DOM是一种W3C标准的文档对象模型,它将整个XML文档解析为一颗树形结构的文档对象,各个节点都是文档对象的子节点。我们可以通过Java的DOM API来操作文档对象树。
SAX
SAX是一种事件驱动的XML解析方法,它不需要将整个XML文档全部读入内存,而是通过事件机制逐行读取XML文档。我们可以通过Java的SAX API来处理XML文档。
JDOM
JDOM是基于Java的DOM和SAX API的封装,它提供了一种方便易用的API来操作XML文档。
StAX
StAX是一种基于事件驱动的XML解析方法,它不同于SAX的是,它提供了一种可编程的解析方式,可以让开发者更加灵活地控制解析过程。我们可以通过Java的StAX API来处理XML文档。
XML解析器使用示例
DOM示例
在DOM示例中,我们将使用Java自带的DOM API来读取XML文档并获取其中的元素。
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
public class DomParserExample {
public static void main(String[] args){
try {
File inputFile = new File("input.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(inputFile);
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("student");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Student roll no : "
+ eElement.getAttribute("rollno"));
System.out.println("First Name : "
+ eElement
.getElementsByTagName("firstname")
.item(0)
.getTextContent());
System.out.println("Last Name : "
+ eElement
.getElementsByTagName("lastname")
.item(0)
.getTextContent());
System.out.println("Nick Name : "
+ eElement
.getElementsByTagName("nickname")
.item(0)
.getTextContent());
System.out.println("Marks : "
+ eElement
.getElementsByTagName("marks")
.item(0)
.getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
在这个示例中,我们通过DocumentBuilderFactory和DocumentBuilder来获取Document对象,然后通过Document对象获取XML文档的根节点和各个节点。然后我们可以按照需要获取各个节点的属性和文本内容。
SAX示例
在SAX示例中,我们将使用Java自带的SAX API来读取XML文档并获取其中的元素。
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
public class SaxParserExample extends DefaultHandler {
boolean bFirstName = false;
boolean bLastName = false;
boolean bNickName = false;
boolean bMarks = false;
@Override
public void startElement(String uri,
String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("student")) {
String rollNo = attributes.getValue("rollno");
System.out.println("Roll No : " + rollNo);
} else if (qName.equalsIgnoreCase("firstname")) {
bFirstName = true;
} else if (qName.equalsIgnoreCase("lastname")) {
bLastName = true;
} else if (qName.equalsIgnoreCase("nickname")) {
bNickName = true;
}
else if (qName.equalsIgnoreCase("marks")) {
bMarks = true;
}
}
@Override
public void endElement(String uri,
String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("student")) {
System.out.println("End Element : " + qName);
}
}
@Override
public void characters(char ch[],
int start, int length) throws SAXException {
if (bFirstName) {
System.out.println("First Name: "
+ new String(ch, start, length));
bFirstName = false;
} else if (bLastName) {
System.out.println("Last Name: "
+ new String(ch, start, length));
bLastName = false;
} else if (bNickName) {
System.out.println("Nick Name: "
+ new String(ch, start, length));
bNickName = false;
} else if (bMarks) {
System.out.println("Marks: "
+ new String(ch, start, length));
bMarks = false;
}
}
public static void main(String[] args){
try {
File inputFile = new File("input.xml");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
SaxParserExample userhandler = new SaxParserExample();
saxParser.parse(inputFile, userhandler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在这个示例中,我们通过SAXParserFactory和SAXParser来解析XML文档,并通过DefaultHandler来处理XML文档中的节点和数据。
结论
Java提供了许多支持XML解析的工具,开发者可以根据自己的需要来选择使用哪种API。在使用XML解析器时,需要注意解析方式和解析结果的格式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java中常用XML解析器的使用 - Python技术站