zoukankan      html  css  js  c++  java
  • Java中的的XML文件读写与DOM

    XML简介

    要理解XML,HTML等格式,先来理解文档对象模型DOM

      

    根据 DOM,HTML 文档中的每个成分都是一个节点,这些节点组成了一棵树。
    DOM 是这样规定的:
    整个文档是一个文档节点
    每个 HTML 标签是一个元素节点
    包含在 HTML 元素中的文本是文本节点
    每一个 HTML 属性是一个属性节点
    注释属于注释节点

    节点彼此都有等级关系。HTML 文档中的所有节点组成了一个文档树(或节点树)。HTML 文档中的每个元素、属性、文本等都代表着树中的一个节点。树起始于文档节点,并由此继续伸出枝条,直到处于这棵树最低级别的所有文本节点为止。

    读取xml文件:

    public static void getFamilyMemebers(){
            DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
            dbf.setIgnoringElementContentWhitespace(true);
            try {
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(xmlPath); // 使用dom解析xml文件
    
                NodeList sonlist = doc.getElementsByTagName("son"); 
                for (int i = 0; i < sonlist.getLength(); i++) // 循环处理对象
                {
                    Element son = (Element)sonlist.item(i);;
                    
                    for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()){  
                        if (node.getNodeType() == Node.ELEMENT_NODE){  
                            String name = node.getNodeName();  
                            String value = node.getFirstChild().getNodeValue();  
                            System.out.println(name+" : "+value);
                        }  
                    }  
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

      注意到 factory 可以生成 builder,builder可以生成document,document可以生成特定名称的node 组成的nodeList,nodeList中的每个node可以转换成element,element可以返回node形式的儿子,node形式的元素可以获得它的属性。

        现在,你能不能将xml的格式还原出来呢?其实并不难,注意xml文档实际上和html文档类似,只不过html文档定义了丰富标签而已。我们把每个元素与屏幕上一个div相对应,这样就可以用图形方便的表示xml结构了。

    现在如果要解析下面的xml:

    <?xml version="1.0" encoding="GB2312" ?> 
    <Root>
    <Header left="100" Top="30">日报表</Header> 
    </Root>

    可以使用代码:

    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.NodeList;
    
    public class Xml {
     public static void main(String[] args) {
      try {
       DocumentBuilderFactory factory = DocumentBuilderFactory
         .newInstance();
       DocumentBuilder builder = factory.newDocumentBuilder();
       Document document = builder.parse(new File("file.xml"));
       Element rootElement = document.getDocumentElement();
    
       NodeList list = rootElement.getElementsByTagName("Header");
       Element element = (Element) list.item(0);
       System.out.println(element.getChildNodes().item(0).getNodeValue());
    
      } catch (Exception e) {
       System.out.println("exception:" + e.getMessage());
      }
     }
    }

    写XML文件

    public static void createSon() {
            DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
            dbf.setIgnoringElementContentWhitespace(false);
            
            try{
            
                DocumentBuilder db=dbf.newDocumentBuilder();
                Document xmldoc=db.parse(xmlPath);
            
                Element root = xmldoc.getDocumentElement();
                
                //删除指定节点
                
                Element son =xmldoc.createElement("son");
                son.setAttribute("id", "004");
                
                Element name = xmldoc.createElement("name");
                name.setTextContent("小儿子");
                son.appendChild(name);
    
                Element age = xmldoc.createElement("name");
                age.setTextContent("0");
                son.appendChild(age);
                
                root.appendChild(son);
                //保存
                TransformerFactory factory = TransformerFactory.newInstance();
                Transformer former = factory.newTransformer();
                former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
                
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    与JSON格式的对比

      JSON格式包含有两种结构: 这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构

      1、对象:对象在js中表示为“{}”括起来的内容引用了一个对象,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
      2、数组:数组在js中是中括号“[]”括起来的内容引用了一个数组,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

  • 相关阅读:
    python 面向对象编程的三大特征之一 多态
    python 访问控制
    python 面向对象编程的三大特征之一 继承
    朱兆祺教你如何攻破C语言学习、笔试与机试的难点
    如何画好流程图
    2013年个人计划
    30天敏捷结果(1):总体认识Getting Result敏捷方法
    每天一个linux命令目录
    国嵌C语言学习
    【head first python】1.初识python 人人都爱列表
  • 原文地址:https://www.cnblogs.com/xinchrome/p/4890723.html
Copyright © 2011-2022 走看看