【题目要求】
第一组:2015 多多 OS 100
第二组:2016 木木 DS 99
第三组:2017 虚虚 SQL 98
把上面的信息输出为XML格式的信息,即输出结果为(这里给出XML输出结果 下面就不再给出了)
2015
多多
OS
100
2016
木木
DS
99
2017
虚虚
SQL
98
1、下载jdom、dom4j 并导入jar包
输出XML格式的信息一般需要使用jdom(jdom2)或者dom4j的jar包
(1)jdom官网下载:http://www.jdom.org (我下面选择用jdom来完成该题目 所以可以不下载dom4j)
进入页面后选择Downloads - Binaries - 选择一个zip包下载 - 下载完后解压 - 得到jdom-2.0.6.jar或jdom-1.1.3.jar(版本不同而已)
(2)dom4j官网下载:https://dom4j.github.io 直接选择下载一个jar包,如dom4j-2.1.1.jar
(3)获得jdom-2.0.6.jar或jdom-1.1.3.jar、dom4j-2.1.1.jar(适合的版本即可)之后,把jar包导入到项目project中,选择Project - Properties - Java Build Path - Libraries - Add External JARs
正确导入之后就会看到这样子的效果
【注意Attention】
在添加外部external的jar包时可以同时添加进项目project,但要注意的是jdom(jdom2)和dom4j的jar包不能同时导入import,会报错,这是因为这两个jar包中都有相同的一些对象,而系统认为它们是同一个包里的同一种对象(如Document对象),所以创建时可以选择其中一个jar包正常导入import,而另外一个在使用它其中的对象时就加上该类所在的包名
比如导入了jdom的jar包,则要使用dom4j中的类时,则可以这样做(反过来导入dom4j,使用jdom时加上包名也可以)
import org.jdom.Document;
import org.jdom.Element;
Element root = new Element("test");//创建元素名为test的根元素
Document doc = new Document(root);//此处使用的是jdom中的Document
org.dom4j.Document document = reader.read("res/book.xml");
org.dom4j.Document document = document.getRootElement();
2、写一个相关的类
具体什么类就根据你要转换的XML信息来决定,这里写一个Student类,同时生成带参的构造函数和各种的get、set方法
public class Student {
private int stuNo;
private String stuName;
private String lesson;
private int mark;
public Student() {//无参构造方法
}
public Student(int stuNo, String stuName, String lesson, int mark) {
super();
this.stuNo = stuNo;
this.stuName = stuName;
this.lesson = lesson;
this.mark = mark;
}
public int getStuNo() {
return stuNo;
}
public void setStuNo(int stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getLesson() {
return lesson;
}
public void setLesson(String lesson) {
this.lesson = lesson;
}
public int getMark() {
return mark;
}
public void setMark(int mark) {
this.mark = mark;
}
}
3、转换成XML格式的信息
先上代码,再解释,代码中有注释,可以仔细看看
import org.jdom2.Document; //jdom2和dom4j的jar包不能同时导入 会出错
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import java.util.ArrayList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
List stu = new ArrayList();//使用Student类作为类型
Student stu1 = new Student(2015, "多多", "OS", 100);
Student stu2 = new Student(2016, "木木", "DS", 99);
Student stu3 = new Student(2017, "虚虚", "SQL", 98);
stu.add(stu1);
stu.add(stu2);
stu.add(stu3);
String resultXml = getXmlFromList(stu); // 根据List数组,生成XML数据
System.out.println(resultXml); // 打印生成的XML数据
}
// 根据List列表封装成XML数据 返回封装后的数据
public static String getXmlFromList(List stu) {
String result = "";
Element root = new Element("stu_list");// 创建元素stu_list——根元素
Document doc = new Document(root);
for (Student student : stu) {
Element element = new Element("Student");
// 先创建元素Student 然后依次在Student中添加子元素stuNo、stuName、lesson、mark
element.setAttribute("id", student.getStuNo() + "");//设置属性 不需要属性可以去掉
element.addContent(new Element("stuNo").setText(student.getStuNo() + ""));
element.addContent(new Element("stuName").setText(student.getStuName()));
element.addContent(new Element("lesson").setText(student.getLesson()));
element.addContent(new Element("mark").setText(student.getMark() + ""));
root.addContent(element);// 在元素stu-list中嵌套子元素Student
// addContent:为元素添加子元素内容,也可以直接添加另一个元素节点
}
XMLOutputter XMLout = new XMLOutputter();
Format format = Format.getPrettyFormat();//创建XML文档输出的格式化方式(该格式化方式,用户可以自定义)
format.setIndent(" ");//使用4个空格进行缩进, 可以兼容文本编辑器
format.setEncoding("GBK");//设置编码格式
XMLout.setFormat(format);//使XML格式化输出
try {
result = XMLout.outputString(doc); // 将Document写入到FileWriter文件流中 输出XML数据
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
【介绍一下XML】
(如果对XML已经有了解的话就不用看这部分了,如果不了解的话最好看一下 可帮助你理解代码)
(1)什么是 XML
(2)XML文档的组成
(3)XML 元素必须遵循以下命名规则
当时因为元素命名错误所以运行时报错,如果报错会有提示,比如:org.jdom2.IllegalNameException: The name "stu list" is not legal for JDOM/XML elements: XML name 'stu list' cannot contain the character " ".
(4)主要使用的函数:
【解析代码】
PS:我最上面给出最终的XML信息的标签都是自定义的,你也可以根据自己需要的信息定义自己的标签
【科普:String 与 int 互相转换】
第一种方法:s = i + ""; //会产生两个String对象
第二种方法:s = String.valueOf(i); //直接使用String类的静态方法,只产生一个对象
第一种方法:i = Integer.parseInt(s); //直接使用静态方法,不会产生多余的对象,但会抛出异常
第二种方法:i = Integer.valueOf(s).intValue(); //Integer.valueOf(s) 相当于 new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象
参考链接: