对XML文档进行JAXP的DOM解析
程序员文章站
2022-03-03 16:13:54
...
首先说一下对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自带的解析方式挺好玩的,很简单,就是那个递归有点绕圈上一篇: 对三个数值进行排序
下一篇: 如何打开ipynb格式文件
推荐阅读