Java⽣成xml四种⽅式
四种⽅式⽣成xml⽂件:
DOM、SAX(Java提供)
JDOM、DOM4J(第三⽅提供)
DOM:
1. 创建⼀个DocumentBuilderFactory对象,静态⽅法newInstance()
2. 创建⼀个DocumentBuilder对象,DocumentBuilderFactory实例的newDocumentBuilder()⽅法
3. 通过DocumentBuilder对象调⽤newDocument⽅法,返回⼀个Document对象
4. 通过Document对象调⽤creatElement⽅法,创建⼀个节点元素,返回Element对象
通过Element对象的appendChild⽅法向该元素添加⼦元素
通过Element对象的setAttribute⽅法,给元素添加属性
…
…
5. 通过TransformerFactory的静态⽅法newInstance(),创建TransformerFactory对象
6. 通过TransformerFactory的newTransformer(),创建Transformer对象
7. Transformer对象的setOutputProperty(OutputKeys.INDENT,”yes”)⽅法可以⽤来换⾏(可选)
8. 调⽤Transformer的transform()⽅法将创建的XML转换成Result,Result可通过new File()构建输出⽂件
/**
* DOM⽅式创建xml⽂件
* @param file ⽂件
* @throws Exception
*/
public static void DOMcreate(File file)throws Exception{
DocumentBuilderFactory wInstance();
DocumentBuilder wDocumentBuilder();
Document wDocument();
document.setXmlStandalone(true);
Element ateElement("tb_student");
for (int i = 0; i < 3; i++) {
Element ateElement("student");
Element ateElement("name"),
ateElement("age"),
ateElement("grade");
student.setAttribute("id", i+"");
name.setTextContent("张"+i);
age.setTextContent(""+i*5);
grade.setTextContent(""+i*20);
student.appendChild(name);
student.appendChild(age);
student.appendChild(grade);
root.appendChild(student);
}
document.appendChild(root);
TransformerFactory wInstance();
Transformer wTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");
}
SAX:
1. ⽤ArrayList存储xml所需的对象集合
2. 通过SAXTransformerFactory的静态⽅法newInstance()创建⼀个SAXTransformerFactory对象
3. 通过SAXTransformerFactory对象的newTransformerHandler()创建⼀个TransformerHandler对象
4. 通过TransformerHandler对象的getTransformer()创建⼀个Transformer对象
5. Transformer对象的setOutputProperty(OutputKeys.INDENT,”yes”)可以实现换⾏(可选)
6. Transformer对象的setOutputProperty(OutputKeys.ENCODING,”编码名称”)可以实现编码格式(可选)
7. 创建Result对象,并使⽤TransformerHandler对象的setResult(Result)⽅法使其与TransformerHandler关联
8. 使⽤TransformerHandler对象的进⾏xml⽂件内容的编写(遍历ArrayList创建各个节点)
startDocument();//开始⽂档
endDocument();//结束⽂档
startElement(String uri,String localName,String qName,Attributes atts);//元素标签开始
endElement(String uri,String localName,String qName,Attributes atts);//元素标签结束
/**
* SAX⽅式创建xml⽂件
* @param file
* @throws Exception
*/
public static void SAXcreate(File file)throws Exception {
//初始化要⽣成⽂件的数据
ArrayList<Student> students=new ArrayList<Student>();
for (int i = 0; i < 3; i++) {
Student student=new Student(i,"张"+i,5*i,10*i);
students.add(student);
}
SAXTransformerFactory stf=(SAXTransformerFactory) wInstance();
TransformerHandler wTransformerHandler();
Transformer Transformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");//标签⾃动换⾏
tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");//编码格式
StreamResult result=new StreamResult(file);//创建Result对象
handler.setResult(result);//关联
handler.startDocument();
handler.startElement("", "", "tb_students", null);//根节点标签
for (Student student : students) {
AttributesImpl atts=new AttributesImpl();//创建熟悉
atts.addAttribute("", "", "id", "", Id()+"");
handler.startElement("", "", "student", atts);//元素标签开始
handler.startElement("", "", "name", null);//元素标签开始
handler.Name().toCharArray(), 0, Name().length());//元素标签内容
handler.startElement("", "", "age", null);
handler.characters((""+Age()).toCharArray(), 0, (""+Age()).length());
handler.startElement("", "", "grade", null);
handler.characters((""+Grade()).toCharArray(), 0,(""+Grade()).toCharArray().length);
}
}
实体类student
package entity;
public class Student {
private int id;
private String name;
private int age;
private int grade;
public Student() {
// TODO Auto-generated constructor stub
}
java xml是什么public Student(int id, String name, int age, int grade) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
}
}
DOM4J:
1. 通过DocumentHelper的静态⽅法createDocument创建⼀个Document对象
2. 创建节点:Document对象的addElement⽅法 返回Element对象
3. 节点添加属性:Element对象的addAttribute⽅法
节点添加内容:Element对象的setText、add⽅法
4. 创建XMLWriter对象 (new) (可使⽤输出流、OutputFormat作为参数,分别给出输出地址和格式)
XMLWriter对象的setEscapeText⽅法可以设置字符是否转义,默认true(转义)
5. 调⽤XMLWriter对象的write⽅法,Document对象作为参数
6. 关闭XMLWriter对象,以及相关资源的close操作
/**
* DOM4J⽅式创建xml⽂件
* @param file
* @throws Exception
*/
public static void DOM4Jcreate(File file)throws Exception{
org.dom4j.Document ateDocument();
org.dom4j.Element root=document.addElement("rss");
root.addAttribute("version", "2.0");
org.dom4j.Element channel=root.addElement("channel");
org.dom4j.Element title=channel.addElement("title");
title.setText("新闻国内");
//...
XMLWriter writer=new XMLWriter(new FileOutputStream(file),atePrettyPrint());
writer.setEscapeText(false);//字符是否转义,默认true
writer.write(document);
writer.close();
}
注:此处模拟的是⼀个”rss”⽂件的⽣成部分代码,是⼀种描述和同步⽹站内容的格式,是使⽤最⼴泛的XML应⽤。JDOM:
1. 创建Document对象 (new)
2. 创建Element对象 (new) 并向其中添加属性/内容/⼦节点
3. 向Document对象中添加Element节点 addContent/setContent
(或者创建Document对象时将Element对象作为参数等)
4. 创建XMLOutputter对象 (new) 并调⽤output⽅法⽣成xml⽂档
/**
* JDOM⽅式创建xml⽂件
* @param file
* @throws Exception
*/
public static void JDOMcreate(File file)throws Exception{
org.jdom2.Document document=new org.jdom2.Document();
org.jdom2.Element root=new org.jdom2.Element("rss");
root.setAttribute("version", "2.0");
root.addContent(
new org.jdom2.Element("channel").addContent(
new org.jdom2.Element("title").setText("新闻国内")));
document.setRootElement(root);
XMLOutputter outputter=new XMLOutputter();
outputter.PrettyFormat());//设置⽂本格式
outputter.output(document, new FileOutputStream(file));
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论