Java操作XML方式的四种比较与详解
XML是可扩展标记语言,被广泛应用于各种应用程序中,Java也提供了多种方式来操作XML文档。其中最常见的有DOM、SAX、JDOM、DOM4J。本文将详细解释这四种方式的使用方式和特点。
DOM(Document Object Model)
DOM是一种将整个XML文档作为一棵树状结构的方式来处理XML文档。在DOM模型中,整个XML文档被解析成一颗树状结构,每个XML元素都被转换成一个Java对象,整棵树形结构构成了一个对象模型。通过访问这个对象模型,可以对XML文档进行增加、删除、修改、查询操作。
DOM方式的优点是可以随意访问XML文档中的任何节点,操作灵活性高。缺点是一次性将整个文档加载到内存中,适用于小型文档,大型文档的解析效率较低。
以下是DOM方式的一个示例:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(file);
doc.getDocumentElement().normalize();
Element rootElement = doc.getDocumentElement();
NodeList nList = doc.getElementsByTagName("student");
for (int i = 0; i < nList.getLength(); i++) {
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Student id : "
+ eElement.getAttribute("id"));
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("Marks : "
+ eElement.getElementsByTagName("marks")
.item(0)
.getTextContent());
}
}
SAX(Simple API for XML)
相较于DOM方式,SAX处理XML文档的方式是在解析文档的时候顺序遍历文档,遇到节点触发相应的事件,利用事件处理程序对节点进行操作和处理。由于SAX解析XML文档不像DOM方式要将整个文档加载进内存,因此适用于大型文档的解析。但缺点是无法访问XML文档的任意节点,只能按照严格的顺序遍历文档。
以下是SAX方式的一个示例:
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean bfname = false;
boolean blname = false;
boolean bnname = false;
boolean bsalary = false;
public void startElement(String uri, String localName,String qName,
Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("FIRSTNAME")) {
bfname = true;
}
if (qName.equalsIgnoreCase("LASTNAME")) {
blname = true;
}
if (qName.equalsIgnoreCase("NICKNAME")) {
bnname = true;
}
if (qName.equalsIgnoreCase("SALARY")) {
bsalary = true;
}
}
public void endElement(String uri, String localName,String qName)
throws SAXException {
}
public void characters(char ch[], int start, int length) throws SAXException {
if (bfname) {
System.out.println("First Name : "
+ new String(ch, start, length));
bfname = false;
}
if (blname) {
System.out.println("Last Name : "
+ new String(ch, start, length));
blname = false;
}
if (bnname) {
System.out.println("Nick Name : "
+ new String(ch, start, length));
bnname = false;
}
if (bsalary) {
System.out.println("Salary : "
+ new String(ch, start, length));
bsalary = false;
}
}
};
saxParser.parse(file, handler);
JDOM
JDOM是一个Java库,由于其易用性成为Java解析XML的首选库之一。JDOM在DOM和SAX的基础上进行了改进,提供了更加方便和高效的处理XML文档的方式。JDOM将XML文档作为树结构来处理,但支持按照节点名称、节点类别和属性等查询节点,同时还支持XPath表达式查询。JDOM还可以通过将树结构缓存到内存中,提高解析效率。
以下是JDOM方式的一个示例:
SAXBuilder builder = new SAXBuilder();
File xmlFile = new File("file.xml");
Document document = (Document) builder.build(xmlFile);
Element rootNode = document.getRootElement();
List list = rootNode.getChildren("staff");
for (int i = 0; i < list.size(); i++) {
Element node = (Element) list.get(i);
System.out.println("First Name : " + node.getChildText("firstname"));
System.out.println("Last Name : " + node.getChildText("lastname"));
System.out.println("Email : " + node.getChildText("email"));
System.out.println("Salary : " + node.getChildText("salary"));
}
DOM4J
DOM4J是一个Java库,提供了一种处理XML文档的简单和易用的方式。与JDOM相似,DOM4J将XML文档视为一个树状结构,同时也支持XPath表达式查询节点,但性能更高。DOM4J处理XML文档的方式与SAX相似,通过事件来处理XML文档。DOM4J还支持将XML文档转换成DOM模型和JDOM模型。
以下是DOM4J方式的一个示例:
SAXReader reader = new SAXReader();
Document document = reader.read(new File("file.xml"));
Element root = document.getRootElement();
List<Element> list = root.elements();
for (Element e : list) {
System.out.println("First Name : " + e.elementText("firstname"));
System.out.println("Last Name : " + e.elementText("lastname"));
System.out.println("Email : " + e.elementText("email"));
System.out.println("Salary : " + e.elementText("salary"));
}
以上就是Java操作XML方式 DOM、SAX、JDOM、DOM4J 四种比较与详解的攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java操作(DOM、SAX、JDOM、DOM4J)xml方式的四种比较与详解 - Python技术站