xml的dom解析(jaxp实现)

来源:互联网 发布:sam软件 编辑:程序博客网 时间:2024/05/01 11:16

xml的解析方式有两种:dom解析,sax解析。

我们来看一下dom是如何解析xml的!

DOM的全名为Document Object Model的缩写。即文档对象模型!dom就相当于一棵树一些样,树枝就是每一个节点:

我们先来看一个xml文件(在escplise下生产xml后转换为source视图操作):

<?xml version="1.0" encoding="UTF-8" standalone="no"?><xml-body><book><bookname>math</bookname><bookprice>12</bookprice></book><book><bookname>english</bookname><bookprice>33</bookprice></book></xml-body>

那么我们怎么用java来操作呢?其实要用到一个工厂类DocumentBuilderFacotry来产生一个dom解析器!

public static Document createHandle(){try {//首先我们创建工厂!产生dom解析器产生工厂!DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//从工厂中创建dom解析器!DocumentBuilder db = dbf.newDocumentBuilder();//接受一个xml文档,并把文档转换为Document对象!return db.parse("src/book.xml");} catch (Exception e) {throw new RuntimeException(e);}}

在这之后就可以操作dom的节点以操作xml了!

public static void readXml(Document d){//这里的NodeList得到的是一个名为“book”的标签元素的列表//也就是里面的元素都是book的node。NodeList nl = d.getElementsByTagName("bookname");Node n = null;for(int i = 0 ;i < nl.getLength(); i++){//可以获得该元素的某一个noden = nl.item(i);//获得node的TextContent!System.out.println(n.getFirstChild().getNodeValue());//当然我们有一个直接的方法获得TextContent!System.out.println(n.getNodeName()+"--"+n.getTextContent());}}

或者这样

ublic static void readXml_1(Document d){//把格式的空格去掉d.normalize();NodeList nl = d.getElementsByTagName("bookname");//由于得到的是element所以就可以强转Element e = (Element) nl.item(0);System.out.println(e.getFirstChild().getNodeValue());}

我们当然也可以改变xml文件

public static void writeXml(Document d){//生成一个element对象Element e = (Element) d.createElement("bookauthor");//在element中添加内容e.setTextContent("jack");//得到要添加的节点NodeList nl = d.getElementsByTagName("book");//添加到得到的节点末端nl.item(0).appendChild(e);}

我们这样只是在内存中改变了所以我们在写入xml'文件

public static void closeXml(Document d){try {TransformerFactory tff = TransformerFactory.newInstance();Transformer tf = tff.newTransformer();//这里的DOMSource是数据源。而StreamResult是数据的目标地点tf.transform(new DOMSource(d),new StreamResult(new File("src/book.xml")));} catch (Exception e) {throw new RuntimeException(e);}}

这样就可以用Dom来操作xml了,这是jaxp的方法去处理xml!


原创粉丝点击