zoukankan      html  css  js  c++  java
  • XML

     
    =======xml文件读写========
    1、什么是xml?
       Extensible markyup language:
       可扩展性标记语言。
       不是语言,w3c退出的一款全新的数据交互格式。
       -----JSON。
       responseText---responseXML
       只不过特征继承了类似于HMTL标记语言的特征。
       用户可自定义标签--同时还必须给标签样式和属性。
       XHTML---全部是小写。
       通俗的说:xml数据交互文件被广泛的使用在各个地方。
                       不依赖于系统和硬件。
     
    2、意义?
       无与伦比的通用性。
       主要功能:用户数据交互。
       java  stu---JSON--XML-->c,c++
       XML:自身提供了解析xml的多种方式。
       用于数据显示:
       用于数据持久化:
       userInfo("1","admin","1")
     
     
     <users>
            <user id="1" name="admin">1</user>
            <user id="2" name="admin1">2</user>
     </users>
     
    <users>
         <id>1001</id>
         <name>admin</name>
    </users>
     
     
    2.什么是?
     
       Iterators:迭代器
       xml  可扩展 标记语言
     
     
    3、怎么用?
       1、dom解析---内存开销大,支持回溯。
     
       2、sax解析---不支持回溯,性能也不是很好。
          p...
     
       3、dom4j解析---好用,免费,语法同一,简单。
                      综合性能释放最好的。
     
     
    public class test01{
         public static void main(String[] args){
              /**
    *解析xml
    */
              try{
                 File src = new File("c:\x\users.xml");
                 //a.创建SAXReader
                 SAXReander reader = new SAXReader();
                 //b.得到document对象(读取文件)
                 //reader.setEncoding("UTF-8");
                 Document doc= reader.read(src);
                 //c.得到根元素(得到xml文件下的根目录)
                 Element root =doc.getRootElenment();
                 //d.得到包含子元素的集合
                  List<Element>eles =root.elements();
                 //e.遍历集合,得到每个元素
                 for(Element element:eles){
                      // Attribute attrname = ele.attribute("name");
                      //String vauename = attrname.getValue();
                      // System.out.println(valuename);
                      System.out.println(element.attributeValue("id"));
                      System.out.println(element.attributeValue("name"));
                      System.out.println(element.getText());    
                   }
                    }catch(Elenment e){
                   e.printStackTrace();
              }
         }
    }
     
     
    public class test02{
         public static void main(String[] args){
              /**
    *写入xml
    */
              try{
                   //a.创建document文档
                   Document doc  = DocumentHelper.crearteDocument();
                   //b.创建根元素
                   Element root = doc.addElement("stus");
                   //c.为根元素添加子元素(属性、内容)
     
              // Element stu1= root.addElement("stus")
              // .addAttribute("id","xwz");
              // .addAttribute("name","小丸子");
              // .addAttribute("喜欢爷爷");
     
                   Element stu1= root.addElement("stus");
                   stu1.addAttribute("id","xwz");
                   stu1.addAttribute("name","小丸子");
                   stu1.addAttribute("喜欢爷爷");
     
                   Element stu2= root.addElement("stus");
                   stu2.addAttribute("id","xy");
                   stu2.addAttribute("name","小玉");
                   stu2.addAttribute("喜欢花轮");
     
                   //d.利用xmlwriter将doc写入磁盘
                   OutputStream out = new FileOutStream("c:\x\stus.xml");
                   //e.创建文档的储存格式 
                   OutputFormat format = OutputFormat.createPrettyPrint();
                   //f.设置保存的编码集
                   format.setEnconding("GBK");
                   XMLwriter writer = new XMLWriter(out,format);
                   //g.写入
                   wirter.writer(doc);
                   wirter.flush();
                   wirter.close();  
                 }catch(Elenment e){
                   e.printStackTrace();
              }    
         }
    }
     
     
    xml的增删改查
     
    pulic class XMLParse{
         private static File file=new File("C:\aa\student.xml");
    /**
    xml数据的增加
    */
    public  void add(Student stu){
         //读取文档
         Document doc = new ParseXML().reader(file);
         Element root = doc.getRootElement();
     
         Element stu1 = root.addElement("student");
         stu1.addAttribute("id",stu.getId());
         stu2.addAttribute("name",stu.getName()).
     
         stu1.setText(stu.getPwd());
     
         new ParseXML().xmlwriter(file,doc);
    }
     
     
    /**
    xml数据的修改
    */
    public  void upd(Student stu){
     //读取文档
    Document doc = new ParseXML().reader(file);
    Element root = doc.getRootElement();
     
    List<Element> element = root.elements();
    for(int i = 0;i<element.size();i++){
         if(elememts.get(i).attributeValue("id").equals(stu.getId())){
             elememts.get(i).attribute("name").setValue("徐晃");
         }
    }
         new ParseXML().xmlwriter(file,doc);
    }
     
    /**
    xml数据的删除
    */
    public  void del(Student stu){
     //读取文档
    Document doc = new ParseXML().reader(file);
    Element root = doc.getRootElement();
     
    List<Element> element = root.elements();
    for(int i = 0;i<element.size();i++){
         if(elememts.get(i).attributeValue("id").equals(stu.getId())){
             elememts.remove(i);
         }
    }
         new ParseXML().xmlwriter(file,doc);
    }
     
     
    /**
    *测试
    */
    public static void main(String[] args){
         Student stu = new Student("1001","索尼");
         add(stu);
         upd(stu);
    }
    }
     
     
    /**
    *创建工具类
    */
     
    public class ParseXML{
     
         //读取数据
         public Document reader(File file){
              InputStream is = null;
              Document doc = null;
              try{
                  is = new FileInputStream(file);
                  SAZReader reader  new SAXReader();
                  doc = new reader.read(is);
              }catch(FileNotFoundException e){
                  e.printStackTrace(); 
              }
              return doc;
         }
     
         //保存
         public void xmlwriter(File file,Document doc){
                      OutputStream out=null;
                    OutoutFormat format=null;
                    XMLwriter writer=null;
                   out = new FileOutStream("c:\x\stus.xml");
                   //e.创建文档的储存格式 
                   format = OutputFormat.createPrettyPrint();
                   //e.设置保存的编码集
                   format.setEnconding("GBK");
                   try{               
          writer = new XMLWriter(out,format);
    }catch(FileNotFoundException e){
          e.printStackTrace(); 
    }
                   //f.写入
                    try{  
                wirter.writer(doc);
                wirter.flush();
                wirter.close();  
                out.close();
                 }catch(Elenment e){
                   e.printStackTrace();
                 } 
               
        }
    }
     
     
     

    DOM和SAX解析的区别
     
     
    1、操作有区别: DOM将所有文件读取到内存中形成DOM树,如果文件量过大,则无法使用
     
            SAX顺序读入所需要的文件内容,不会一次性全部读取,不受文件大小的限制
     
    2 访问限制有区别: DOM树在内存中形成,可以随意存放或读取文件树的任何部分,没有次数限制
     
               SAX由于采用部分读取,只能对文件按顺序从头到尾读取XML文件内容,但不能修改
     
    3 修改有区别: DOM可以任意修改文件树
     
            SAX只能读取XML文件内容,但不能修改
     
    4 复杂度有区别:DOM 易于理解,易于开发
     
            SAX开发上比较复杂,需要用户自定义事件处理器
     
    5 对象模型有区别: DOM 系统为使用者自动建立DOM树,XML对象模型由系统提供
     
               SAX 对开发人员更加灵活,可以用SAX建立自己的XML对象模型
     
     
    DOM 简介:
        DOM 对于 XML 的处理方式就是把整个 XML 读到内存中形成一棵树状结构,
     
        然后用各种方法对这棵数进行遍历、插入、删除、修剪等操作。因为 DOM
     
        是 W3C 的正式标准,所有的语言都有支持 DOM 的解析器,包括 Java、C/C++、Perl、
     
        JavaScript 等等。DOM 的优点是信息量丰富(全部都在内存中),而且可以随机访问,
     
        尤其是在处理前后相互关联的元素时非常方便。DOM 的缺点是 XML 应用程序在处理 XML
     
        之前必须先由 XML 解析器把整个 XML 读进内存并生成树状结构,如果 XML 非常大,
     
        例如 10M,解析的过程是非常慢的。如果再加上 XSLT 转换(这是一种必须要使用 DOM 的操作)
     
        这类同样耗费资源的操作,可能会耗尽系统的内存资源。所以标准 DOM 只适合于中小型 XML 的处理。
     
     
    SAX 简介:
        为了更好地解决大型 XML 处理的问题,Java 开发人员发明了 SAX。SAX 采用事件驱动的方式来处理 XML,它
     
        的处理方式是:为每一个元素、属性、内容(这些都认为是事件)定义一个回调方法,这个回调方法由应用程
     
        序提供。解析器以数据流的方式读入 XML,当遇到某个元素、属性、内容时就调用相应的回调方法。SAX 的优
     
        点是处理效率高,适合处理大型 XML。缺点是 SAX 对 XML 是只读的,不能够对 XML 进行写操作,而且 SAX
     
        处理 XML 中前后相互关联的元素时也没有 DOM 方便,因为应用程序必须自己保留以前事件的状态信息。但是
     
        SAX 还是取得了巨大的成功,后来 SAX 还被移植到了 C++ 等语言中。
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    刷题19. Remove Nth Node From End of List
    刷题17. Letter Combinations of a Phone Number
    mysql图形化工具基本操作
    报错:ER_NO_DEFAULT_FOR_FIELD: Field 'status' doesn't have a default value
    express综合用法
    npm自定义上传
    node_第三方包下载文件package.jon详解
    正则表达式修改文字元素对齐方式
    初始化文章分类的方法 下拉的layui框
    标准git请求
  • 原文地址:https://www.cnblogs.com/nin-w/p/5907477.html
Copyright © 2011-2022 走看看