DOM与DOM4J对XML文件的解析

    xiaoxiao2025-06-11  18

    package com.freshbin.domtest.test; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DOMTest { public static void main(String[] args) { // TODO Auto-generated method stub //创建一个DocumentBuilderFactory的对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { //创建一个DocumentBuilder的对象 DocumentBuilder db = dbf.newDocumentBuilder(); //通过DocumentBuilder对象的parse方法加载book.xml文件到当前项目下 Document document = db.parse("freshbin/book.xml"); //获取所有book节点的集合 NodeList bookList = document.getElementsByTagName("book"); //通过NodeList的getLength()方法获取bookList的长度 System.out.println("一共有" + bookList.getLength() + "本书\n"); //遍历每一个book节点 for(int i = 0; i < bookList.getLength(); i++) { System.out.println("========下面开始遍历第" + (i+1) + "本书====="); //通过item()方法获取一个book节点,nodelist的索引值从0开始 Node book = bookList.item(i); //获取book节点的所有属性的集合 NamedNodeMap attrs = book.getAttributes(); System.out.println("第" + (i+1) + "本书共有" + attrs.getLength() + "个属性"); //遍历book的属性 for(int j = 0; j < attrs.getLength(); j++) { //通过item()方法获取book节点的每一个属性 Node attr = attrs.item(j); //获取属性名 System.out.print("属性名:" + attr.getNodeName()); //获取属性值 System.out.println("--属性名:" + attr.getNodeValue()); } //解析book节点的子节点 NodeList childNodes = book.getChildNodes(); //遍历childNodes获取每个节点的节点名和节点值 System.out.println("第" + (i+1) + "本书共有" + childNodes.getLength() + "个子节点"); for(int k = 0; k < childNodes.getLength(); k++) { //区分出text类型的node以及element类型的node if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) { //获取了element节点的节点名 System.out.print("第" + (k+1) + "个节点的节点名" + childNodes.item(k).getNodeName()); //获取了element节点的节点值,节点值其实看做是子节点,即比如<name>freshbin</name>,freshbin是name的子节点 // System.out.println("--节点值是:" + childNodes.item(k).getFirstChild().getNodeValue()); //第二种获取值的方法 System.out.println("--节点值是:" + childNodes.item(k).getTextContent()); } } System.out.println("========结束遍历第" + (i+1) + "本书=====\n"); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

    以上是DOM的方式解析,结果如下

    然后是DOM4J的方式解析

    package com.freshbin.dom4jtest.test; import java.io.File; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class DOM4JTest { public static void main(String[] args) { // TODO Auto-generated method stub //创建SAXReader的对象reader SAXReader reader = new SAXReader(); try { //通过reader对象的read()方法加载book.xml文件 Document document = reader.read(new File("freshbin/book.xml")); //通过document对象获取根节点bookStore Element bookStore = document.getRootElement(); //通过Element对象的elementIterator方法获取迭代器 Iterator itr = bookStore.elementIterator(); //遍历迭代器,获取根节点中的信息 while(itr.hasNext()) { System.out.println("==========开始遍历某一本书============="); Element book = (Element)itr.next(); //获取book的属性名以及属性值 List<Attribute> bookAttrs = book.attributes(); for(Attribute attr : bookAttrs) { System.out.println("属性名:" + attr.getName() + "--属性值:" + attr.getStringValue()); } Iterator itrBook = book.elementIterator(); while(itrBook.hasNext()) { Element bookChild = (Element)itrBook.next(); System.out.println("节点名:" + bookChild.getName() + "--节点值:" + bookChild.getStringValue()); } System.out.println("==========结束遍历某一本书=============\n"); } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

    转载请注明原文地址: https://ju.6miu.com/read-1299852.html
    最新回复(0)