首先说一下对XML文档解析的两种方法的好坏
DOM的CRUD方便,缺点是占用内存比较大
SAX 占用内存小 解析速度快 缺点是只适合做文档的读取 不适合CRUD
下面我将使用java 自带的JAXP进行XML文档的解析
首先将book.xml解析文档贴上来
<?xml version="1.0" encoding="UTF-8" ?> <书架> <书> <书名 name="12345">java就业培训</书名> <作者>张孝祥</作者> <售价>30.00元</售价> </书> <书> <书名>JavaScript开发详解</书名> <作者>张孝祥</作者> <售价>15.00</售价> </书> </书架>
下面是解析代码
package com.bird.xml; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * @use 对XML文档进行JAXP的DOM解析 * @author Bird * */ public class XmlReader { public Document getDocument() throws Exception{//返回XML文档的Document对象 //1创建工厂 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //2.得到解析器 DocumentBuilder builder = factory.newDocumentBuilder(); //3.解析XML文档,获得代表文档的Document Document document = builder.parse("d://book.xml"); return document; } public void read1() throws Exception{//读取指定标签下的内容 Document document = getDocument(); NodeList list = document.getElementsByTagName("书名"); for(int i = 0; i < list.getLength(); i++){ Node node = list.item(i); System.out.println(node.getTextContent()); } } public void read2() throws Exception{//得到XML中所有的节点名字 Document document = getDocument(); //得到根节点 NodeList list = document.getElementsByTagName("书架"); for(int i = 0; i < list.getLength(); i++){ Node node = list.item(i); listNode(node);//遍历这个节点的下面的子节点 } } private void listNode(Node node){//递归调用标签名字 if(node instanceof Element){//判断是否是Element对象,否则会解析换行符出现#Text System.out.println(((Element) node).getTagName()); } NodeList list = node.getChildNodes();//得到node 的子节点 for(int i = 0; i < list.getLength(); i++){ Node child = list.item(i); listNode(child);//递归调用打印出下面的子节点 } } public void read3() throws Exception{//得到标签属性的值 Document document = getDocument(); Element bookname = (Element)document.getElementsByTagName("书名").item(0);//第一个标签的属性,强制转换成Element更方便 System.out.println(bookname.getAttribute("name")); } public static void main(String[] args) throws Exception{//测试 XmlReader reader = new XmlReader(); //reader.read1(); //reader.read2(); reader.read3(); } } 代码上面的注释写的差不多了,估计也不需要什么解释,呵呵,就这样挂把,感觉JAVA自带的解析方式挺好玩的,很简单,就是那个递归有点绕圈