Java生成xml四种方式
来源:互联网 发布:关于贼的网络用语 编辑:程序博客网 时间:2024/05/18 00:18
四种方式生成xml文件:
DOM、SAX(Java提供)
JDOM、DOM4J(第三方提供)
DOM:
- 创建一个DocumentBuilderFactory对象,静态方法newInstance()
- 创建一个DocumentBuilder对象,DocumentBuilderFactory实例的newDocumentBuilder()方法
- 通过DocumentBuilder对象调用newDocument方法,返回一个Document对象
- 通过Document对象调用creatElement方法,创建一个节点元素,返回Element对象
通过Element对象的appendChild方法向该元素添加子元素
通过Element对象的setAttribute方法,给元素添加属性
…… - 通过TransformerFactory的静态方法newInstance(),创建TransformerFactory对象
- 通过TransformerFactory的newTransformer(),创建Transformer对象
- Transformer对象的setOutputProperty(OutputKeys.INDENT,”yes”)方法可以用来换行(可选)
- 调用Transformer的transform()方法将创建的XML转换成Result,Result可通过new File()构建输出文件
/** * DOM方式创建xml文件 * @param file 文件 * @throws Exception */ public static void DOMcreate(File file)throws Exception{ DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); DocumentBuilder db=dbf.newDocumentBuilder(); Document document=db.newDocument(); document.setXmlStandalone(true); Element root=document.createElement("tb_student"); for (int i = 0; i < 3; i++) { Element student=document.createElement("student"); Element name=document.createElement("name"), age=document.createElement("age"), grade=document.createElement("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 tff=TransformerFactory.newInstance(); Transformer tf=tff.newTransformer(); tf.setOutputProperty(OutputKeys.INDENT, "yes"); tf.transform(new DOMSource(document), new StreamResult(file)); }
SAX:
- 用ArrayList存储xml所需的对象集合
- 通过SAXTransformerFactory的静态方法newInstance()创建一个SAXTransformerFactory对象
- 通过SAXTransformerFactory对象的newTransformerHandler()创建一个TransformerHandler对象
- 通过TransformerHandler对象的getTransformer()创建一个Transformer对象
- Transformer对象的setOutputProperty(OutputKeys.INDENT,”yes”)可以实现换行(可选)
- Transformer对象的setOutputProperty(OutputKeys.ENCODING,”编码名称”)可以实现编码格式(可选)
- 创建Result对象,并使用TransformerHandler对象的setResult(Result)方法使其与TransformerHandler关联
- 使用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) SAXTransformerFactory.newInstance(); TransformerHandler handler=stf.newTransformerHandler(); Transformer tf=handler.getTransformer(); 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", "", student.getId()+""); handler.startElement("", "", "student", atts);//元素标签开始 handler.startElement("", "", "name", null);//元素标签开始 handler.characters(student.getName().toCharArray(), 0, student.getName().length());//元素标签内容 handler.endElement("", "", "name");//元素标签结束 handler.startElement("", "", "age", null); handler.characters((""+student.getAge()).toCharArray(), 0, (""+student.getAge()).length()); handler.endElement("", "", "age"); handler.startElement("", "", "grade", null); handler.characters((""+student.getGrade()).toCharArray(), 0,(""+student.getGrade()).toCharArray().length); handler.endElement("", "", "grade"); handler.endElement("", "", "student");//元素标签结束 } handler.endElement("", "", "tb_students");//结束根节点标签 handler.endDocument(); }
实体类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 } public Student(int id, String name, int age, int grade) { super(); this.id = id; this.name = name; this.age = age; this.grade = grade; } 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) { this.grade = grade; }}
DOM4J:
- 通过DocumentHelper的静态方法createDocument创建一个Document对象
- 创建节点:Document对象的addElement方法 返回Element对象
- 节点添加属性:Element对象的addAttribute方法
节点添加内容:Element对象的setText、add方法 - 创建XMLWriter对象 (new) (可使用输出流、OutputFormat作为参数,分别给出输出地址和格式)
XMLWriter对象的setEscapeText方法可以设置字符是否转义,默认true(转义) - 调用XMLWriter对象的write方法,Document对象作为参数
- 关闭XMLWriter对象,以及相关资源的close操作
/** * DOM4J方式创建xml文件 * @param file * @throws Exception */ public static void DOM4Jcreate(File file)throws Exception{ org.dom4j.Document document=DocumentHelper.createDocument(); 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),OutputFormat.createPrettyPrint()); writer.setEscapeText(false);//字符是否转义,默认true writer.write(document); writer.close(); }
注:此处模拟的是一个”rss”文件的生成部分代码,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用。
JDOM:
- 创建Document对象 (new)
- 创建Element对象 (new) 并向其中添加属性/内容/子节点
- 向Document对象中添加Element节点 addContent/setContent
(或者创建Document对象时将Element对象作为参数等) - 创建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.setFormat(Format.getPrettyFormat());//设置文本格式 outputter.output(document, new FileOutputStream(file)); }
0 0
- Java生成xml四种方式
- Java生成xml文件的四种方式
- XML的四种生成方式
- java 解析xml四种方式
- java解析xml文件四种方式
- java解析xml文件四种方式
- java解析xml文件四种方式
- JAVA解析XML文件四种方式
- java解析xml文件四种方式
- java解析XML四种方式
- java解析xml文件四种方式
- java解析xml文件四种方式
- Java解析XML的四种方式
- Java四种操作XML方式
- java解析xml文件四种方式
- java解析xml文件四种方式
- Java读取xml的四种方式
- JAVA XML 解析的四种方式
- 什么是面向对象的JavaScript(四)——多态
- Atitit 编程语言编程方法的进化演进 sp COP ,AOP ,SOP
- [CloudReader] Android 开发中所遇问题归纳(持续更新)
- windowns安装mysql.zip
- okhttp还是蛮方便的
- Java生成xml四种方式
- 八大免费SSL证书-给你的网站免费添加Https安全加密
- 递归算法判断数组是否为一个递增数组
- 二、servlet不同页面共享数据的四中方式
- ROI图像分割
- linux 文件系统简介
- 视频颜色识别
- Redux 入门教程
- 【C解析之四】指针