在java中应用dom解析xml
添加时间:2013-5-3 点击量:
dom是个功能强大的解析对象,实用于小文档
为什么这么说呢?因为它会把整篇xml文档装载进内存中,形成一颗文档对象树
总之听起来怪吓人的,不过应用它来读取点小器材相对Sax而言还是挺便利的
至于它的增删操纵等,我是不筹算写了,在我看教程的时辰我就差点被那代码给丑到吐了
也正因为如此,才有后来那些jdom和dom4j等对象的存在……
不久不多说,直接上代码
Dom解析示例
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Demo {
public static void main(String[] args) throws Exception {
//创建解析器工厂实例,并生成解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
//创建须要解析的文档对象
File f = new File(books.xml);
//解析文档,并返回一个Document对象,此时xml文档已加载到内存中
//好吧,让解析来得更狠恶些吧,其余的事就是获取数据了
Document doc = builder.parse(f);
//获取文档根元素
//你问我为什么这么做?因为文档对象本身就是树形布局,这里就是树根
//当然,你也可以直接找到元素凑集,省略此步调
Element root = doc.getDocumentElement();
//上方找到了根节点,这里开端获取根节点下的元素凑集
NodeList list = root.getElementsByTagName(book);
for (int i = 0; i < list.getLength(); i++) {
//经由过程item()办法找到凑集中的节点,并向下转型为Element对象
Element n = (Element) list.item(i);
//获取对象中的属性map,用for轮回提取并打印
NamedNodeMap node = n.getAttributes();
for (int x = 0; x < node.getLength(); x++) {
Node nn = node.item(x);
System.out.println(nn.getNodeName() + : + nn.getNodeValue());
}
//打印元素内容,代码很纠结,差不久不多是个固定格局
System.out.println(title: +n.getElementsByTagName(title).item(0).getFirstChild().getNodeValue());
System.out.println(author: + n.getElementsByTagName(author).item(0).getFirstChild().getNodeValue());
System.out.println();
}
}
}
输出成果:
读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
dom是个功能强大的解析对象,实用于小文档
为什么这么说呢?因为它会把整篇xml文档装载进内存中,形成一颗文档对象树
总之听起来怪吓人的,不过应用它来读取点小器材相对Sax而言还是挺便利的
至于它的增删操纵等,我是不筹算写了,在我看教程的时辰我就差点被那代码给丑到吐了
也正因为如此,才有后来那些jdom和dom4j等对象的存在……
不久不多说,直接上代码
Dom解析示例
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Demo {
public static void main(String[] args) throws Exception {
//创建解析器工厂实例,并生成解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
//创建须要解析的文档对象
File f = new File(books.xml);
//解析文档,并返回一个Document对象,此时xml文档已加载到内存中
//好吧,让解析来得更狠恶些吧,其余的事就是获取数据了
Document doc = builder.parse(f);
//获取文档根元素
//你问我为什么这么做?因为文档对象本身就是树形布局,这里就是树根
//当然,你也可以直接找到元素凑集,省略此步调
Element root = doc.getDocumentElement();
//上方找到了根节点,这里开端获取根节点下的元素凑集
NodeList list = root.getElementsByTagName(book);
for (int i = 0; i < list.getLength(); i++) {
//经由过程item()办法找到凑集中的节点,并向下转型为Element对象
Element n = (Element) list.item(i);
//获取对象中的属性map,用for轮回提取并打印
NamedNodeMap node = n.getAttributes();
for (int x = 0; x < node.getLength(); x++) {
Node nn = node.item(x);
System.out.println(nn.getNodeName() + : + nn.getNodeValue());
}
//打印元素内容,代码很纠结,差不久不多是个固定格局
System.out.println(title: +n.getElementsByTagName(title).item(0).getFirstChild().getNodeValue());
System.out.println(author: + n.getElementsByTagName(author).item(0).getFirstChild().getNodeValue());
System.out.println();
}
}
}
输出成果:
读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。