解析方式两种:
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
- 达内jar组件"坐标"搜索: http://maven.tedu.cn/nexus/(内网使用)
- 阿里云jar组件"坐标"搜索: http://maven.aliyun.com/nexus/
.用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
}
}
}