javaXML

来源:互联网 发布:还珠之我是知画 编辑:程序博客网 时间:2024/06/06 02:10



2017年7月6日学习总结:


XML

XML是可扩展标记语言,独立于软件和硬件的信息传输工具。


主要用途:
1,简化数据共享
2,简化数据传输

3,简化平台的变更


XML基本语法
元素从开始标签直到结束标签。
元素可包含其他元素、文本、属性。
大小写敏感
必须有根元素,不被其它元素包围。并且根元素只能有一个。
元素必须正确嵌套
CDATA段
[格式:<![CDATA[文本内容]]>
文本内容里的所有数据当中字符串处理

XML解析
SAXReader读取XML文档
使用SAXReader需要导入dom4j-full.jar包。
解析XML的过程
1,创建SAXReader读取XML文档,获得一个Document。
2,使用Document的Element getRootElement()
  获取根元素。
3,使用Element的Element element(String name)
  获取当前元素下的指定名字的子元素
  或者使用List elements()
  获取当前元素下的所有子元素
4,使用String getText()获取元素的文本信息
5,使用Attribute attribute(String name)
  获取元素的指定名字的属性。
  使用Attribute对象的String getValue()
  获取属性的值

写XML
1,使用DocumentHelper的
  static Document createDocument()获取Document对象
2,使用Document的Element addElement()添加根元素
3,使用Element的Element addElement()方法向元素中添加子元素。
4,使用Element的Element addAttribute(String name,String value)向元素中添加属性及值。
5,使用Element的Element addTest(String text)
向元素添加文本信息。

6,使用XMLWriter的 write方法将文档输出生成XML文档


一个写XML的案例

package day12;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 * 要求用户控制台输入想输入的员工人数(至少5个),然后依序输入员工信息,每行为
 * 一条员工信息,格式如:1,张三,25,男,5000,2006-3-18
 * 每当输入一个员工后,要检查新输入的员工的id是否已经存在,即:不能在本次输入的
 * 这些员工信息中出现相同id的员工。
 * 然后按照emp.xml的格式,将这些员工写入到myemp.xml文档中。
 * @author Over Front
 *       需要导入pom.xml->Dependencies->add->don4j-dom4j->dom4j:1.6.1->CTRL+s保存一下
 */
public class Test02 {
public static void main(String[] args) throws ParseException {
Collection<Emp> c = getEmp(5);
writeDoc(c,"myemp.xml");
}

/**
* 将员工集合的内容按照emp.xml写到指定路径的文档中
* @param name
*/
public static void writeDoc(Collection<Emp> c,String name){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
XMLWriter writer = null;
try {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("list");
for(Emp e : c){
Element empEle = root.addElement("emp");
empEle.addElement("name").addText(e.getName());
empEle.addElement("age").addText(String.valueOf(e.getAge()));
empEle.addElement("gender").addText(e.getGender());
empEle.addElement("salary").addText(String.valueOf(e.getSalary()));
empEle.addElement("hirdate").addText(sdf.format(e.getHiredate()));
empEle.addAttribute("id", String.valueOf(e.getId()));
}

FileOutputStream fos = new FileOutputStream(name);
   writer = new XMLWriter(fos,OutputFormat.createPrettyPrint());
   
   writer.write(document);
   System.out.println("写出完毕!");
} catch (Exception e) {
e.printStackTrace();
}finally{
if(writer!=null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 获取员工信息的方法
* @return 返回生成的员工集合
* 1,张三,25,男,5000,2006-3-18
* @throws ParseException 
*/
public static Collection<Emp> getEmp(int num) throws ParseException{
Map<Integer,Emp> map =new LinkedHashMap<Integer,Emp>(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Scanner scanner = new Scanner(System.in);
for(int i=1;i<=num;i++){
System.out.println("请输入第"+i+"个员工信息");
String input = scanner.nextLine();
String[] info = input.split(",");
int id = Integer.parseInt(info[0]);
if(map.containsKey(id)){
System.out.println("该员工已存在,请重新输入:");
i--;
continue;
}
String name = info[1];
int age = Integer.parseInt(info[2]);
String gender = info[3];
int salary = Integer.parseInt(info[4]);
Date hiredate = sdf.parse(info[5]);
Emp emp = new Emp(id,name,age,gender,salary,hiredate);
map.put(id, emp);
}
return map.values();
}
}


控制台输入员工信息



XML文档

<?xml version="1.0" encoding="UTF-8"?>


<list>
  <emp id="1">
    <name>张三</name>
    <age>25</age>
    <gender>男</gender>
    <salary>5000</salary>
    <hirdate>2006-03-18</hirdate>
  </emp>
  <emp id="2">
    <name>李四</name>
    <age>26</age>
    <gender>男</gender>
    <salary>6000</salary>
    <hirdate>2007-03-18</hirdate>
  </emp>
  <emp id="3">
    <name>王五</name>
    <age>27</age>
    <gender>男</gender>
    <salary>7000</salary>
    <hirdate>2008-03-18</hirdate>
  </emp>
  <emp id="4">
    <name>赵六</name>
    <age>28</age>
    <gender>男</gender>
    <salary>8000</salary>
    <hirdate>2009-03-18</hirdate>
  </emp>
  <emp id="5">
    <name>钱七</name>
    <age>29</age>
    <gender>男</gender>
    <salary>9000</salary>
    <hirdate>2010-03-18</hirdate>
  </emp>
</list>






























原创粉丝点击