• XML新


    解析方式两种:

     1.SAX 解析:优点:速度快,他逐级扫描文件,一边扫描一边解析,没有内存压力

                         缺点:不能对节点做修改(只能用来读)

    2.DOM解析:优点:把xml文件在内存中构造树形结构,可以遍历和修改节点

                         缺点:如果文件比较大,内存有压力,解析的时间比较长

    关于解决创建maven的红叉问题:

     右键maven名,选择Maven下的Update Project ...稍等一下 红叉消失

    关于导包:

    1.选择pom.xml打开

    2.选择下方的第二项Dependencies,索引导包

    3.或者在最后一项pom.xml中直接添加要导

    入的包相关信息例如导入dom4j包(黄色为导入包)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>tedu.cn</groupId>
      <artifactId>0820XML</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <dependencies>
       <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
       </dependency>
      </dependencies>
    </project>
    

    达内搜索pom.xml地址:http://maven.tedu.cn

    .用SAXReader读取XML File文件:

    例:将emplist.xml文件中保存的员工信息
         * 解析出来,以若干Emp实例形式存入List集合。
         * 程序中的数据不应在程序中写死,否则一旦数据有
         * 修改,就要修改源程序

    emplist.xml代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <list>
       <emp id="1">
       <name>张三</name>
       <age>22</age>
       <gender>男</gender>
       <salary>6000</salary>
       </emp>
       <emp id="2">
       <name>李四</name>
       <age>50</age>
       <gender>女</gender>
       <salary>8000</salary>
       </emp>
       <emp id="3">
       <name>王五</name>
       <age>60</age>
       <gender>男</gender>
       <salary>8900</salary>
       </emp>
       <emp id="4">
       <name>马六</name>
       <age>14</age>
       <gender>女</gender>
       <salary>9008</salary>
       </emp>
       <emp id="5">
       <name>朱七</name>
       <age>25</age>
       <gender>女</gender>
       <salary>9000</salary>
       </emp>
     
     
    </list>
    

      

    使用DOM4J解析xml的大致步骤:
      * 1:创建SAXReader
      * 2:使用SAXReader读取xml文档并得到对应的Document对象
      * 3:通过Document获取根元素
      * 4:从根元素中按照文档结构逐级获取子元素,已
      * 达到遍历XML文档数据的目的
      * 若想使用dom4j首先必须下载dom4j.jar并导入到
      * 项目环境中(maven要配置好)

      常用方法:

    Element的每一个实例用于表示xml文档中的
    * 一个元素(一对标签)。
    * 其提供了很多获取其表示的元素相关信息的方法:

    * String getName()
    * 获取当前元素的名字(标签的名字)

    * String getText()
    * 获取当前元素中的文本(开始和结束标签中间的文本信息)

    * Element element(String name)
    * 获取当前元素中指定名字的子元素

    * List elements()
    * 获取当前元素中所有子元素

    * List elements(String name)
    * 获取当前元素中所有的指定名字的同名子元素

    * Attribute attribute(String name)
    * 获取当前元素中指定名字的属性

    *获取当前元素中指定名字的子元素中间的文本
    *例如:
    * String str=e.elementText("name")等同于
    * e.element("name").getText();

    */

    代码:

    package xml;
     
     
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.plaf.synth.SynthSpinnerUI;
     
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
     
    public class ParseXmlDemo {
    public static void main(String[] args) {
        /*
         * 将emplist.xml文件中保存的员工信息
         * 解析出来,以若干Emp实例形式存入List集合。
         * 程序中的数据不应在程序中写死,否则一旦数据有
         * 修改,就要修改源程序
         */
        @SuppressWarnings("unused")
        List <Emp>list=new ArrayList<Emp>();
        try {
            /*
             * 使用DOM4J解析xml的大致步骤:
             * 1:创建SAXReader
             * 2:使用SAXReader读取xml文档并得到对应的Document对象
             * 3:通过Document获取根元素
             * 4:从根元素中按照文档结构逐级获取子元素,已
             * 达到遍历XML文档数据的目的
             *
             * 若想使用dom4j首先必须下载dom4j.jar并导入到
             * 项目环境中(maven要配置好)
             */
             
            SAXReader reader=new SAXReader ();//字符输入流
            //导的包是org.dom4j.Document下的
            Document doc=reader.read(new File("emplist.xml"));
             
            /*
             * Element的每一个实例用于表示xml文档中的
             * 一个元素(一对标签)。
             * 其提供了很多获取其表示的元素相关信息的方法:
             *
             * String getName()
             * 获取当前元素的名字(标签的名字)
             *
             * String getText()
             * 获取当前元素中的文本(开始和结束标签中间的文本信息)
             *
             * Element element(String name)
             * 获取当前元素中指定名字的子元素
             *
             * List elements()
             * 获取当前元素中所有子元素
             *
             * List elements(String name)
             * 获取当前元素中所有的指定名字的同名子元素
             *
             * Attribute attribute(String name)
             * 获取当前元素中指定名字的属性
             *
             *获取当前元素中指定名字的子元素中间的文本
             *例如:
             * String str=e.elementText("name")等同于
             * e.element("name").getText();
             *
             */
            //获取根标签(emplist中最外一层的标签)的名字
            Element root=doc.getRootElement();
            System.out.println(root.getName());
             
            //获取根标签下所有指定名字的<emp>标签
            List<Element>emplist=root.elements("emp");
             
            /*
             * 将每个<emp>标签表示的员工信息解析
             * 出来以Emp实例形式存入list集合
             */
            for(Element empEle:emplist){
                //获取当前元素中所有的指定名字的同名子元素
                Element names=empEle.element("name");
                //获取子元素中文本信息:姓名
                String name=names.getText();
    //          System.out.println(name);
                //获取年龄
                int age=Integer.parseInt(empEle.element("age").getText());
                //获取性别
                Element genders=empEle.element("gender");
                String gender=genders.getText();
                //获取薪资
                int salary=Integer.parseInt(empEle.elementText("salary"));
                 
                //获取当前标签下指定名字的属性
                Attribute att =empEle.attribute("id");
                int id=Integer.parseInt(
                        empEle.attributeValue("id"));
                Emp emp=new Emp(id,name,age,gender,salary);
                list.add(emp);
        }
        System.out.println("解析完毕");
    for(Emp e:list){
    System.out.println(e);
        }
             
        } catch (Exception e) {
            e.printStackTrace();
        <br><br>  }
     
    }
    }
    

      

    将class导成xml的配置文件 

    常用方法:

    用获取的Document文件名

    调用addElement()就是根目录;

    * Element addElement(String name)
    * 向当前元素中追加子元素并将其返回,以便继续对其追加

    * Element addText(String text)
    * 向当前元素的开始与结束标签之间添加文本,返回的任然是
    * 当前元素,以便对当前元素继续做其他的追加

    * Element addAttribute(String name,String value)
    * 向当前元素中追加指定名字与对应值的属性,返回值依然是当前元素。

     代码:

    <span style="background-color: #ffff00"> 写出XML的大致步骤
             * 1:创建一个Document对象表示一个空白文档
             * 2:向Document中添加根元素
             * 3:从根元素开始按照要生成的文档结构逐级
             *    添加子元素及信息
             * 4:创建XmlWriter
             * 5:将Document通过XmlWriter写出以生成XML</span>
    97
    package xml;
    import java.io.FileOutputStream;
    /**
     * 将class导出成.xml的文件
     *
     */
    import java.util.ArrayList;
    import java.util.List;
     
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;
     
    public class WriteXmlDemo {
    public static void main(String[] args) {
        List<Emp>list=new ArrayList<Emp>();
        list.add(new Emp(1,"张三",25,"男",5000));
        list.add(new Emp(2,"李四",56,"女",8000));
        list.add(new Emp(3,"孔二",44,"男",9000));
        list.add(new Emp(4,"赵六",28,"女",4000));
        list.add(new Emp(5,"钱七",24,"男",10000));
        System.out.println(list);
        try {
            /*
             * 写出XML的大致步骤
             * 1:创建一个Document对象表示一个空白文档
             * 2:向Document中添加根元素
             * 3:从根元素开始按照要生成的文档结构逐级
             *    添加子元素及信息
             * 4:创建XmlWriter
             * 5:将Document通过XmlWriter写出以生成XML
             */
            //1
            Document doc=DocumentHelper.createDocument();
            /*2
             * Document提供了添加根元素的方法
             * Element addElement(String name)
             * 向当前文档中添加给定名字的根元素,并以Element
             * 实例的形式返回,以便于继续向根元素追加信息。
             * 需要注意,该方法只能调用一次,因为一个文档只能有一个根元素。
             */
            Element root=doc.addElement("list");
            /*
             * 将每个员工信息以emp标签形式存入到根元素中
             * Element提供了住家相关信息的方法:
             * Element addElement(String name)
             * 向当前元素中追加子元素并将其返回,以便继续对其追加
             *
             * Element addText(String text)
             * 向当前元素的开始与结束标签之间添加文本,返回的任然是
             * 当前元素,以便对当前元素继续做其他的追加
             *
             * Element addAttribute(String name,String value)
             * 向当前元素中追加指定名字与对应值的属性,返回值依然是当前元素。
             */
             
            for(Emp e:list){
                //向根元素中追加子元素<emp>
                Element empEle=root.addElement("emp");
                //向<emp>中追加子元素<name>
                Element nameEle=empEle.addElement("name");
                //向标签name中加入文本信息
                nameEle.addText(e.getName());
                 
                //向emp中追加子元素<age>
                Element ageEle=empEle.addElement("age");
                //向<age>中加入文本文档
                ageEle.addText(String.valueOf(e.getAge()));
                 
                //向emp中追加子元素<gender>
                Element genderEle=empEle.addElement("gender");
                //向genderEle中添加文本信息
                genderEle.addText(e.getGender());
                //向emp中追加子元素<salary>
                Element salaryEle=empEle.addElement("salary");
                salaryEle.addText(String.valueOf(e.getSalary()));
                 
                //向emp中追加id属性
                empEle.addAttribute("id",String.valueOf(e.getId()));
            }
            //org.dom4j.XMLWriter
            XMLWriter writer=new XMLWriter(
                    new FileOutputStream("myemp.xml"),
                    //后一个参数代表生成的文件是否会自动换行,计算机之
                    //不用生成有后一个参数的xml
                    OutputFormat.createPrettyPrint()
                    );
            writer.write(doc);
            System.out.println("写出完毕");
            writer.close();
          } catch (Exception e) {
            // TODO: handle exception
        }
    }
    }
    

      

     

      

  • 相关阅读:
    iOS构建流畅的交互界面--卡顿产生的原因
    iOS-tableViewCell重用机制带来的问题及解决
    完全背包
    poj1384
    RunLoop的使用--AFNetworking的网络线程实现+tableView延迟加载图片+App崩溃后立即重启
    poj 3624
    01背包
    poj1416
    java中 File文件常用操作方法的汇总
    线程中涉及到的知识点总结
  • 原文地址:https://www.cnblogs.com/chenzhiwei/p/9554177.html
Copyright © 2020-2023  润新知