XML解析方式

XML网络应用
DOM(Document Object Model,文档对象模型):它是由W3C定义的独立于语言与平台的XML处理接口规范,并在多种语言中得到了实现。XML文档结构类似于一棵树,而DOM规范正是将XML的树形结构映射到内存中的一个树形的树形结构上。在这棵树上,每个节点对应这XML文档树的一个节点,允许动态操作这个树模型的内容风格和结构。



SAX(Simple API for XML,XML的简单API)提供了一个事件驱动,顺序访问的机制来读取XML文档的内容。与DOM相比,SAX具有更快的处理速度和更低的内存需求,因此他被经常用于各类面向网络的应用。但是,采用SAX机制将比采用DOM接口要求更多的代码,因为它是事件驱动的,需要实现它的回调接口。





XML exam





Java代码
public class Employee{
private long id;
private String name;
private boolean isMale;

public Employee(){

}

public Employee(long id,String name,boolean isMale){
this.id=id;
this.name=name;
this.isMale=isMale;
}

public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public boolean isMale() {
return isMale;
}
public void setMale(boolean isMale) {
this.isMale = isMale;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

public class Employee{
private long id;
private String name;
private boolean isMale;

public Employee(){

}

public Employee(long id,String name,boolean isMale){
this.id=id;
this.name=name;
this.isMale=isMale;
}

public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public boolean isMale() {
return isMale;
}
public void setMale(boolean isMale) {
this.isMale = isMale;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

读写xml文件

Java代码
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
* XML读写示例
* @author xzy
*
*/
public class XmlReaderWriter{
/**
* 读取一个XML文件,返回一个雇员链表
* @param fileName
* @return
*/
public List<Employee> readXml(String fileName){
List<Employee> employees=new ArrayList<Employee>();

SAXReader reader = new SAXReader();
try {
Document document = reader.read(new File(fileName));
Element root = document.getRootElement();

List nodes = root.elements("employee");

for (Iterator it = nodes.iterator(); it.hasNext();) {
Employee employee=new Employee();

// 根节点下的雇员子节点
Element employeeElm = (Element) it.next();

// 获取雇员子节点的id属性
Attribute attribute=employeeElm.attribute("id");
employee.setId(Long.parseLong(attribute.getText()));// 将文本形式的long字符串还原成基本类型

// 获得雇员子节点的名称子节点
Element nameElm=employeeElm.element("name");
employee.setName(nameElm.getText());// 获取名称子节点的文字

// 获取雇员子节点的性别子节点的文字
employee.setMale(Boolean.parseBoolean(employeeElm.element("ismale").getText()));

// 将雇员信息放入链表
employees.add(employee);
}

} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return employees;
}

/**
* 将一个雇员链表写入XML文档
* @param employees
* @param fileName
*/
public void writerToFile(List<Employee> employees,String fileName){
// 创建文档对象
Document document = DocumentHelper.createDocument();
// 创建根节点
Element root = document.addElement("employees");

for(Employee emp:employees){
// 创建employee节点
Element empElm = root.addElement("employee");

// 创建employee节点的id属性
empElm.addAttribute("id", String.valueOf(emp.getId()));

// 创建employee节点的子节点name
Element nameElm = empElm.addElement("name");
nameElm.setText(emp.getName());// 设置子节点的文字

// 创建employee节点的子节点ismale
Element ismaleElm = empElm.addElement("ismale");
ismaleElm.setText(String.valueOf(emp.isMale()));// 设置子节点的文字
}

// 将document文档对象写入文件
XMLWriter writer;
try {
writer = new XMLWriter(new FileWriter(fileName));
writer.write(document);
writer.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args){
/* List<Employee> employees=new ArrayList<Employee>();
employees.add(new Employee(1,"Andy",true));
employees.add(new Employee(2,"Bill",false));
employees.add(new Employee(3,"Cindy",true));
employees.add(new Employee(4,"Doutglas",false));

XmlReaderWriter xmlReaderWriter=new XmlReaderWriter();
xmlReaderWriter.writerToFile(employees, "Employees.xml");*/

XmlReaderWriter xmlReaderWriter=new XmlReaderWriter();
List<Employee> employee=xmlReaderWriter.readXml("Employees.xml");


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值