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 >
   <name>张三</name>
   <age>22</age>
   <gender>男</gender>
   <salary>6000</salary>
   </emp>
   <emp >
   <name>李四</name>
   <age>50</age>
   <gender>女</gender>
   <salary>8000</salary>
   </emp>
   <emp >
   <name>王五</name>
   <age>60</age>
   <gender>男</gender>
   <salary>8900</salary>
   </emp>
   <emp >
   <name>马六</name>
   <age>14</age>
   <gender>女</gender>
   <salary>9008</salary>
   </emp>
   <emp >
   <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
    }
}
}