zoukankan      html  css  js  c++  java
  • Java:XML篇,使用DOM读取并解析XML

    1. 描述

    1. DOM(Document Object Model) DOM 一种独立于平台和语言的方式访问和修改一个文档的内容和结构。 
    2. DOM 采用建立树形结构的方式访问 XML文档,实际上是以面向对象方式描述的文档模型。 
    3. DOM 树在内存中是持久的,程序能对数据和结构作出更改,使用起来也要简单得多。 
    4. DOM 对于特别大的文档,解析和加载整个文档可能很慢且很耗资源。

    2. 示范代码

    package com.clzhang.sample.xml;
    
    import java.io.*;
    
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.DocumentBuilder;
    
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    import org.w3c.dom.Node;
    import org.w3c.dom.Element;
    
    /**
     * DOM(Document Object Model) DOM 一种独立于平台和语言的方式访问和修改一个文档的内容和结构。 
     * DOM 采用建立树形结构的方式访问 XML文档,实际上是以面向对象方式描述的文档模型。 
     * DOM 树在内存中是持久的,程序能对数据和结构作出更改,使用起来也要简单得多。 
     * DOM 对于特别大的文档,解析和加载整个文档可能很慢且很耗资源。
     */
    public class DOMTest {
        // 读取文件测试(其输入是writeXMLFile的输出)
        public void parseByDOM(String filename) throws Exception {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
    
            Document doc = builder.parse(new File(filename));
            NodeList nlDoc = doc.getElementsByTagName("doc");
            for (int i = 0; i < nlDoc.getLength(); i++) {
                Element element = (Element)nlDoc.item(i);
                System.out.println(element.getNodeName() + "\tid=" + element.getAttribute("id"));
                for (Node node = element.getFirstChild(); node != null; node = node
                        .getNextSibling()) {
                    if (node.getNodeType() == Node.ELEMENT_NODE) {
                        Element child = (Element) node;
                        String value = child.getTextContent();
                        System.out.println("\t" + child.getNodeName() + "=" + value);
                    }
                }
                System.out.println();
            }
        }
        
        // 写入文件测试
        public void writeXMLFile(String filename) throws Exception {
            // 创建对象结构
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dbf.newDocumentBuilder();
            Document doc = builder.newDocument();
            
            // 先创建根节点
            Element root = doc.createElement("add");
            doc.appendChild(root); // 将根元素添加到文档上
            
            // 再创建子节点一,并加入些信息
            Element element = doc.createElement("doc");
            element.setAttribute("id", "1");
            Element title = doc.createElement("title");
            title.appendChild(doc.createTextNode("维护权益!")); 
            element.appendChild(title);
            Element content = doc.createElement("content");
            content.appendChild(doc.createTextNode("有一个更完善的交流平台,共建美好家园"));
            element.appendChild(content);
            root.appendChild(element);
            
            // 再创建子节点二,并加入些信息
            element = doc.createElement("doc");
            element.setAttribute("id", "2");
            title = doc.createElement("title");
            title.appendChild(doc.createTextNode("不维护权益!")); 
            element.appendChild(title);
            content = doc.createElement("content");
            content.appendChild(doc.createTextNode("没有一个更完善的交流平台,不共建美好家园"));
            element.appendChild(content);
            root.appendChild(element);
            
            // 输出到文件
            Source source = new DOMSource(doc);
            FileOutputStream fos = new FileOutputStream(filename);
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
            Transformer tf = TransformerFactory.newInstance().newTransformer();
            tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
            tf.transform(source, new StreamResult(osw));
            osw.close();
            fos.close();
        }
    
        public static void main(String arge[]) throws Exception {
            long starttime = System.currentTimeMillis();
            
            DOMTest ins = new DOMTest();
            ins.writeXMLFile("bbs.xml");
            ins.parseByDOM("bbs.xml");
    
            System.out.println("运行时间:" + (System.currentTimeMillis() - starttime)
                    + " 毫秒");
        }
    }
  • 相关阅读:
    linux学习
    linux学习--常用基本命令
    expect学习
    linux学习-cut,ssh keygen ,find
    expect
    告别痛苦,快乐学习Pandas!开源教程《Joyful-Pandas》发布
    iBooker 财务提升星球 2020.2~3 热门讨论
    计算机电子书 2020 CDNDrive 备份(预览版)
    poj2017
    poj2000
  • 原文地址:https://www.cnblogs.com/nayitian/p/2867238.html
Copyright © 2011-2022 走看看