java解析xml有多种方式,这里主要记录一下DOM解析和DOM4j解析
首先我们准备一个简单的xml文件
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <name>三体</name> <author>刘慈欣</author> <price>70</price> </book> <book id="2"> <name>红楼梦</name> <author>曹雪芹</author> <language>中文</language> </book> </bookstore> DOM解析DOM解析是java中自带的解析方式,主要实现代码如下
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; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; /** * Created by lenovo1 on 2017-03-10. */ public class DOMTest { public static void main(String[] args) { //创建一个DocumentBuilderFactory对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //创建一个DocumentBuilder对象 try { //创建DocumentBuilder对象 DocumentBuilder db = dbf.newDocumentBuilder(); //通过DocumentBuilder对象的parse方法加载books.xml文件到当前项目下 Document document = db.parse("books.xml"); //获取所有book结点的集合 NodeList bookList = document.getElementsByTagName("book"); //遍历每一个book节点 for (int i =0;i<bookList.getLength();i++) { //通过item(i)方法 获取一个book节点,nodeList的索引值从0开始 Node book = bookList.item(i); //获取book节点的所有属性集合 NamedNodeMap attrs = book.getAttributes(); //遍历book的属性 for (int j=0;j<attrs.getLength();j++) { //通过item(index)方法获取book节点的某一个属性 Node attr = attrs.item(j); //获取属性名 System.out.print("属性名:" + attr.getNodeName()); //获取属性值 System.out.println("--属性值" + attr.getNodeValue()); } //解析book节点的子节点 NodeList childNodes = book.getChildNodes(); //遍历childNodes获取每个节点的节点名和节点值 for (int k = 0; k < childNodes.getLength(); k++) { //区分出text类型的node以及element类型的node if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) { //获取了element类型节点的节点名 System.out.print("节点名:"+ childNodes.item(k).getNodeName()); System.out.println("--节点值是:" + childNodes.item(k).getTextContent()); } } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } DOM4j解析DOM4j解析不是java中自带的解析方式,需要外部导入jar包
import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Created by lenovo1 on 2017-03-10. */ public class DOM4jTest { private static ArrayList<Book> bookList = new ArrayList<Book>(); public static void main(String[] args) { // 创建SAXReader的对象reader SAXReader reader = new SAXReader(); try { Document document = reader.read(new File("books.xml")); Element bookStore = document.getRootElement(); Iterator it = bookStore.elementIterator(); while (it.hasNext()) { System.out.println("=====开始遍历某一本书====="); Element book = (Element) it.next(); // 获取book的属性名以及 属性值 List<Attribute> bookAttrs = book.attributes(); for (Attribute attr : bookAttrs) { System.out.println("属性名:" + attr.getName() + "--属性值:" + attr.getValue()); } Iterator itt = book.elementIterator(); while (itt.hasNext()) { Element bookChild = (Element) itt.next(); System.out.println("节点名:" + bookChild.getName() + "--节点值:" + bookChild.getStringValue()); } System.out.println("=====结束遍历某一本书====="); } } catch (DocumentException e) { e.printStackTrace(); } } }