JAVA生成XML文件
- 格式:doc
- 大小:91.50 KB
- 文档页数:15
java中四种⽣成和解析XML⽂档的⽅法详解(介绍+优缺点⽐较+⽰例)众所周知,现在解析XML的⽅法越来越多,但主流的⽅法也就四种,即:DOM、SAX、JDOM和DOM4J下⾯⾸先给出这四种⽅法的jar包下载地址DOM:在现在的Java JDK⾥都⾃带了,在xml-apis.jar包⾥⼀、介绍及优缺点分析1. DOM(Document Object Model)DOM是⽤与平台和语⾔⽆关的⽅式表⽰XML⽂档的官⽅W3C标准。
DOM是以层次结构组织的节点或信息⽚断的集合。
这个层次结构允许开发⼈员在树中寻找特定信息。
分析该结构通常需要加载整个⽂档和构造层次结构,然后才能做任何⼯作。
由于它是基于信息层次的,因⽽DOM被认为是基于树或基于对象的。
【优点】①允许应⽤程序对数据和结构做出更改。
②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。
【缺点】①通常需要加载整个XML⽂档来构造层次结构,消耗资源⼤。
2. SAX(Simple API for XML)SAX处理的优点⾮常类似于流媒体的优点。
分析能够⽴即开始,⽽不是等待所有的数据被处理。
⽽且,由于应⽤程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。
这对于⼤型⽂档来说是个巨⼤的优点。
事实上,应⽤程序甚⾄不必解析整个⽂档;它可以在某个条件得到满⾜时停⽌解析。
⼀般来说,SAX还⽐它的替代者DOM快许多。
选择DOM还是选择SAX?对于需要⾃⼰编写代码来处理XML⽂档的开发⼈员来说,选择DOM还是SAX解析模型是⼀个⾮常重要的设计决策。
DOM采⽤建⽴树形结构的⽅式访问XML⽂档,⽽SAX采⽤的是事件模型。
DOM解析器把XML⽂档转化为⼀个包含其内容的树,并可以对树进⾏遍历。
⽤DOM解析模型的优点是编程容易,开发⼈员只需要调⽤建树的指令,然后利⽤navigation APIs访问所需的树节点来完成任务。
可以很容易的添加和修改树中的元素。
java注解⽣成xml和包含CDATA问题百度java⽣成xml,有⼀⼤推的⽂章,主要的⽣成⽅式⼀种使⽤Dom4J ,还有⼀种使⽤Jdk⾃带注解类!下⾯主要整理我注解类的使⽤,(可以参考这篇⽂章)和xml中CDATA 问题的解决⽅法!1:要⽣成的xml原始⽂件!<?xml version="1.0" encoding="utf-8"?><item><id>35399645973</id><title><![CDATA[补⽔⾸选⽔密码⽔保湿美⽩护洗护组合三件]]> </title><category><![CDATA[美妆>保湿>洗护]]></category><url><![CDATA[/detail-35399645973]]> </url><url_wap><![CDATA[/de99645973]]> </url_wap><price>310</price><promotion_price>93.8</promotion_price><wap_price>85</wap_price><sub_item_ids><sub_item_id>35399645973_1</sub_item_id><sub_item_id>35399645973_2</sub_item_id><sub_item_id>35399645973_3</sub_item_id>……</sub_item_ids><detail><![CDATA[商品详情,⽀持html图⽂混排]]> </detail><status>1<status><pic_main><img><url><![CDATA[/10777829/T_400x400.jpg]]> </url><size>400x400</size></img></pic_main><pic_extra><img><url><![CDATA[/10777821_400x400.jpg]]> </url><size>400x400</size></img><img><url><![CDATA[/10777822_400x400.jpg]]> </url><size>400x400</size></img></pic_extra ></item>2:xml对应的model类!(1):FanLiProductInofMsg.javaimport java.util.List;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlElementWrapper;import javax.xml.bind.annotation.XmlRootElement;/**** @author aflyun* @date 2016.06.12**/@XmlRootElement(name="item")public class FanLiProductInofMsg {@XmlAttributeprivate String version;@XmlElementprivate String id;@XmlElementprivate String title;@XmlElementprivate String category;@XmlElementprivate String url;//Pc商品的url@XmlElement(name="url_wap")private String urlWap;//Wap商品的url url_wap@XmlElementprivate String price;@XmlElement(name="promotion_price")private String promotionPrice;//promotion_price@XmlElement(name="wap_price")private String wapPrice;//wap_price@XmlElementWrapper(name="sub_item_ids")@XmlElement(name="sub_item_id")private List<String> subItemIds;//sub_item_ids@XmlElementprivate String detail;//detail@XmlElementprivate String status;//status@XmlElementWrapper(name="pic_main")@XmlElement(name="img")private List<Img> mainImg;//pic_main@XmlElementWrapper(name="pic_extra")@XmlElement(name="img")private List<Img> extraImg;//pic_extrapublic void setVersion(String version) {this.version = version;}public void setId(String id) {this.id = id;}public void setTitle(String title) {this.title = title;}public void setCategory(String category) {this.category = category;}public void setUrl(String url) {this.url = url;}public void setUrlWap(String urlWap) {this.urlWap = urlWap;}public void setPrice(String price) {this.price = price;}public void setPromotionPrice(String promotionPrice) { this.promotionPrice = promotionPrice;}public void setWapPrice(String wapPrice) {this.wapPrice = wapPrice;}public void setSubItemIds(List<String> subItemIds) { this.subItemIds = subItemIds;}public void setDetail(String detail) {this.detail = detail;}public void setStatus(String status) {this.status = status;}public void setMainImg(List<Img> mainImg) {this.mainImg = mainImg;}public void setExtraImg(List<Img> extraImg) {this.extraImg = extraImg;}}(2):Img .javaimport javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;/**** @author aflyun* @date 2016.06.12**/@XmlRootElementpublic class Img {@XmlElement(name="url")private String url;@XmlElement(name="size")private String size;public void setUrl(String url) {this.url = url;}public void setSize(String size) {this.size = size;}}3:⽣成过程,已经CDATA问题处理!package com.dufy.test.xml;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileWriter;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import javax.xml.bind.JAXBContext;import javax.xml.bind.Marshaller;import javax.xml.transform.sax.SAXResult;import org.apache.xml.serialize.OutputFormat;import org.apache.xml.serialize.XMLSerializer;import org.junit.Test;import com.kuyu.b2b2c.product.fanli.vo.FanLiProductInofMsg; import com.kuyu.b2b2c.product.fanli.vo.Img;public class JuintXmlTest {private static Marshaller marshal;@Testpublic void testXml() throws Exception {List<String> list = new ArrayList<String>();list.add("11_11_11");list.add("22_22_22");list.add("33_33_33");List<Img> imgList = new ArrayList<Img>();Img img = null;for (int i = 0; i < 2; i++) {img = new Img();img.setUrl("-" + i + "-");img.setSize("40×40");imgList.add(img);}FanLiProductInofMsg fps = new FanLiProductInofMsg();fps.setVersion("1.0");fps.setId("110");fps.setTitle("4K ⾼清");fps.setCategory("电视>4K>⾼清");fps.setUrl("");fps.setUrlWap("");fps.setPrice("100");fps.setPromotionPrice("111");fps.setWapPrice("113");fps.setSubItemIds(list);fps.setDetail("wwwwwwwwwwwwwwwwwwwwwww");fps.setStatus("1");fps.setMainImg(imgList);fps.setExtraImg(imgList);PrintWriter pw = new PrintWriter(new File("D:/test.xml"));String ojbectToXmlWithCDATA = ojbectToXmlWithCDATA(FanLiProductInofMsg.class, fps);System.out.println(ojbectToXmlWithCDATA);pw.println(ojbectToXmlWithCDATA);pw.close();}public static String ojbectToXmlWithCDATA(Class clazz, Object obj) throws Exception {JAXBContext context = JAXBContext.newInstance(clazz);// configure an OutputFormat to handle CDATAOutputFormat of = new OutputFormat();of.setCDataElements(new String[] { "^title", //"^category","^url","^url_wap","^detail"}); //// set any other options you'd likeof.setPreserveSpace(true);of.setIndenting(true);// create the serializerByteArrayOutputStream op = new ByteArrayOutputStream();XMLSerializer serializer = new XMLSerializer(op, of);SAXResult result = new SAXResult(serializer.asContentHandler());Marshaller mar = context.createMarshaller();mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);mar.marshal(obj, result);return op.toString("utf-8");}}setCDataElements 这⾥⾯你标注需CDATA 的字段!上⾯的这个例⼦可以直接拷贝运⾏,⽹上还⼀些其他的⽅法⽣成xml和CDATA,如果你有好的⽅法,欢迎分享给我,谢谢!4:参考⽂章(1):(2):(3):欢迎访问我的csdn博客,我们⼀同成长!。
JAVA写xml文件随着计算机技术的飞速发展,需要在程序中存储和管理大量的信息,并用众多的语言和工具进行交互。
为了解决这个问题,以及为不同的程序语言提供一致的格式来实现数据交换,XML(超文本标记语言)应运而生,并在软件开发中得到广泛运用。
XML用来描述数据的一种文本语言,它可以存储比如用户及其信息,设置,排列,及其他数据的内容。
XML在许多计算机程序中被广泛使用,它可以被用来传递数据,或者以XML标记格式存储信息。
尽管XML可以使用任何编程语言来解析,但是其最常见的用法是使用Java来写。
接下来我们就使用Java来写XML文件,具体步骤如下:第一步:准备好XML文件所需要的相关信息。
第二步:导入Java标准包(javax.xml.parsers.*)。
第三步:实例化DocumentBuilderFactory。
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();第四步:使用builderFactory来实例化DocumentBuilder。
DocumentBuilder builder =builderFactory.newDocumentBuilder();第五步:使用DocumentBuilder来创建文档并且添加元素。
Document document = builder.newDocument();Element rootElement = document.createElement(rootdocument.appendChild(rootElement);第六步:添加属性并写入XML文件。
Element nameElement = document.createElement(amenameElement.setTextContent(EarthrootElement.appendChild(nameElement);Element sizeElement = document.createElement(sizesizeElement.setTextContent(largerootElement.appendChild(sizeElement);TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer =transformerFactory.newTransformer();DOMSource source = new DOMSource(document);StreamResult result = new StreamResult(newFile(file.xml);transformer.transform(source, result);以上是Java写入XML文件的实例,从上面可以看出JAVA语言是一种非常强大的程序语言,它结合XML技术,可以用来实现大量复杂的数据存储和交互。
使用要导入dom4j-1.6.1.jar文件我的dom4j文件在讲解生成xml 1:先通过DocumentHelper类的.createDocument()方法生成Document文件2:接着通过DocumentHelper类的createElement("根节点字符串形式")创建根节点3:通过通过生成的Document的实例的setRootElement(根节点)设置根节点4:接着可以通过Document的实例的getRootElement()方法得到根节点5:接着通过根节点(Element类的实例)的.addElement("子节点的字符串形式")添加子节点6:通过节点类(Element类的实例)的setText("字符串“)设置节点对应的值7:通过Document类的实例的.asXML();的方式的得到xml字符串;(注意:xml 是字符串String的形式。
可以设置几个同名的根节点(<user>username1<user><<user>username2<user>)解析时通过Elment的.elementIterator("user");方法得到迭代器)解析xml 1:通过new SAXReader();得到SAXReader的一个实例2:通过StringReader(参数是字符串)将xml字符串转化为一个Reader字符输入流3:通过SAXReader的实例.read(参数是个Reader)得到得到Document4:通过Document的getRootElement()方法得到根节点(Element类的实例)5:通过根节点的element("子节点的字符串形式")方法得到子节点(若有多个同名子节点通过根节点的.elementIterator("user")得到同名节点迭代器)6:通过节点的getTxt();方法得到节点的值生成xml 例子:private static Document constructDocument()//此处会被下面调用{Document document = DocumentHelper.createDocument();Element root = DocumentHelper.createElement("message");document.setRootElement(root);return document;}document文件。
Java XML处理解析和生成XML数据Java作为一种广泛使用的编程语言,提供了丰富的API和工具来处理和操作XML数据。
本文将介绍Java中处理和解析XML数据的基本方法,并探讨如何使用Java生成XML数据。
一、XML简介XML(可扩展标记语言)是一种用于描述数据的标记语言,它的设计目标是传输数据而不仅仅是显示数据。
XML以一种结构化的方式存储数据,使得数据具有良好的可读性和可扩展性。
二、XML解析XML解析是指将XML数据转换为Java程序可以理解和处理的格式。
Java提供了几种XML解析方法,包括DOM(文档对象模型)、SAX(简单API for XML)和StAX(流API for XML)。
1. DOM解析DOM解析是最常用和最常见的XML解析方法之一。
DOM将XML文档视为一个树形结构,通过解析整个文档并将其加载到内存中,以方便对数据的操作和访问。
使用DOM解析XML的基本步骤如下:(1)创建一个DocumentBuilder对象。
(2)使用DocumentBuilder对象的parse()方法解析XML文件,返回一个Document对象。
(3)通过Document对象获取XML文件中的节点和元素。
以下是一个使用DOM解析XML的示例代码:```DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse(new File("example.xml"));// 获取根节点Element rootElement = document.getDocumentElement();// 获取子节点NodeList nodeList = rootElement.getElementsByTagName("book");for (int i = 0; i < nodeList.getLength(); i++) {Element bookElement = (Element) nodeList.item(i);String title =bookElement.getElementsByTagName("title").item(0).getTextContent( );String author =bookElement.getElementsByTagName("author").item(0).getTextContent();System.out.println("Title: " + title + ", Author: " + author);}```2. SAX解析SAX解析是一种基于事件驱动的解析方法。
Java⽣成和解析XML格式⽂件和字符串的实例代码1、基础知识:Java解析XML⼀般有四种⽅法:DOM、SAX、JDOM、DOM4J。
2、使⽤介绍1)、DOM(1)简介由W3C(org.w3c.dom)提供的接⼝,它将整个XML⽂档读⼊内存,构建⼀个DOM树来对各个节点(Node)进⾏操作。
优点就是整个⽂档都⼀直在内存中,我们可以随时访问任何节点,并且对树的遍历也是⽐较熟悉的操作;缺点则是耗内存,并且必须等到所有的⽂档都读⼊内存才能进⾏处理。
(2)⽰例代码:复制代码代码如下:<?xml version="1.0" encoding="UTF-8" standalone="no"?><root><TelePhone><type name="nokia"><price>599</price><operator>CMCC</operator></type><type name="xiaomi"><price>699</price><operator>ChinaNet</operator></type></TelePhone></root>复制代码代码如下:import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.StringReader;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.InputSource;import org.xml.sax.SAXException;public class XMLHandler {public XMLHandler(){}public String createXML(){String xmlStr = null;DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try {DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.newDocument();document.setXmlVersion("1.0");Element root = document.createElement("root");document.appendChild(root);Element telephone = document.createElement("TelePhone");Element nokia = document.createElement("type");nokia.setAttribute("name", "nokia");Element priceNokia = document.createElement("price");priceNokia.setTextContent("599");nokia.appendChild(priceNokia);Element operatorNokia = document.createElement("operator");operatorNokia.setTextContent("CMCC");nokia.appendChild(operatorNokia);telephone.appendChild(nokia);Element xiaomi = document.createElement("type");xiaomi.setAttribute("name", "xiaomi");Element priceXiaoMi = document.createElement("price");priceXiaoMi.setTextContent("699");xiaomi.appendChild(priceXiaoMi);Element operatorXiaoMi = document.createElement("operator");operatorXiaoMi.setTextContent("ChinaNet");xiaomi.appendChild(operatorXiaoMi);telephone.appendChild(xiaomi);root.appendChild(telephone);TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transFormer = transFactory.newTransformer();DOMSource domSource = new DOMSource(document);//export stringByteArrayOutputStream bos = new ByteArrayOutputStream();transFormer.transform(domSource, new StreamResult(bos));xmlStr = bos.toString();//-------//save as fileFile file = new File("TelePhone.xml");if(!file.exists()){file.createNewFile();}FileOutputStream out = new FileOutputStream(file);StreamResult xmlResult = new StreamResult(out);transFormer.transform(domSource, xmlResult);//--------} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (TransformerConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (TransformerException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return xmlStr;}public void parserXML(String strXML){DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();try {DocumentBuilder builder = factory.newDocumentBuilder();StringReader sr = new StringReader(strXML);InputSource is = new InputSource(sr);Document doc = builder.parse(is);Element rootElement = doc.getDocumentElement();NodeList phones = rootElement.getElementsByTagName("type");for (int i = 0; i < phones.getLength(); i++) {Node type = phones.item(i);String phoneName = ((Element)type).getAttribute("name");System.out.println("Phone name = "+phoneName);NodeList properties = type.getChildNodes();for (int j = 0; j < properties.getLength(); j++) {Node property = properties.item(j);String nodeName = property.getNodeName();if (nodeName.equals("price")) {String price=property.getFirstChild().getNodeValue();System.out.println("price="+price);} else if (nodeName.equals("operator")) {String operator=property.getFirstChild().getNodeValue();System.out.println("operator="+operator);}}}} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {XMLHandler handler = new XMLHandler();String xml = handler.createXML();System.out.println(xml);handler.parserXML(xml);}}(3)元素(Element)和结点(Node)的区别(org.w3c.dom)Node对象是整个⽂档对象模型的主要数据类型,是DOM中最基本的对象,代表了⽂档树中的抽象节点。
java⽣成和解析xml 本⽂主要使⽤的是Jdom.jar包(包的下载百度⼀下)实现了⽣成xml⽂件和解析xml⽂件下⾯是⽣成xml的实现说明:stuLists集合是⼀个存放着Student对象的集合1import java.io.File;2import java.io.FileNotFoundException;3import java.io.FileOutputStream;4import java.io.IOException;5import java.util.ArrayList;67import org.jdom.Document;8import org.jdom.Element;9import org.jdom.input.SAXBuilder;10import org.jdom.output.Format;11import org.jdom.output.XMLOutputter;1213public class AddXml {14public static void main(String[] args) {15new AddXml().changeXml();16 }17public void changeXml(){18 Jdbc jdbc = new Jdbc();19 jdbc.addList();20 ArrayList<Student> stuLists = Jdbc.getStuList();2122 Document docu = new Document();23 Element root = new Element("root");24 docu.addContent(root);25for (int i = 0; i < stuLists.size(); i++) {26// System.out.println(stuLists.get(i));27 Student s = stuLists.get(i);2829 Element info = new Element("info");30 Element student = new Element("student");31 Element id = new Element("id");32 Element name = new Element("name");33 Element sex = new Element("sex");34 Element age = new Element("age");3536 Element book = new Element("book");37 Element bid = new Element("bid");38 Element bname = new Element("bname");39 Element bprice = new Element("bprice");40 Element bautor = new Element("bautor");41 book.addContent(bid);42 book.addContent(bname);43 book.addContent(bprice);44 book.addContent(bautor);4546 student.addContent(id);47 student.addContent(name);48 student.addContent(sex);49 student.addContent(age);50 info.addContent(student);51 info.addContent(book);5253 root.addContent(info);54int a = i+1;55 String No = "000"+a;56 student.setAttribute("No", No);57 id.setText(s.getId());58 name.setText(s.getName());59 sex.setText(s.getSex());60 age.setText(s.getAge());6162 String b="0"+a;63 bid.setText(b);64 bname.setText("java核⼼");65 bprice.setText("1334.0");66 bautor.setText("star");6768 }69//格式化⽣成的xml⽂件,如果不进⾏格式化的话,⽣成的xml⽂件将会是很长的⼀⾏...70 Format format = Format.getCompactFormat();71 format.setEncoding("utf-8");72 format.setIndent(" ");73 XMLOutputter xo = new XMLOutputter(format);74try {75 xo.output(docu, new FileOutputStream(new File("e:/io/stu.xml")));76 } catch (FileNotFoundException e) {77// TODO Auto-generated catch block78 e.printStackTrace();79 } catch (IOException e) {80// TODO Auto-generated catch block81 e.printStackTrace();82 }83 System.out.println("⽣成xml⽂件成功!!!");84 }85 }结果如图所⽰:下⾯是⽤java解析上⾯所写的xml⽂件简写版package com.direct.demo;import java.io.IOException;import java.util.List;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;public class Saxxml {public static void main(String[] args) {//解析xml⽂档SAXBuilder builder = new SAXBuilder();Document docu = null;try {docu = builder.build("e:/io/student.xml");} catch (JDOMException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}Element root = docu.getRootElement();//得到根⽬录List stulist = root.getChildren();System.out.println(stulist.size()+"-----------");System.out.println("------------------读取xml⽂档的信息---------------------"); for (int i = 0; i < stulist.size(); i++) {Element e = (Element) stulist.get(i);String stuid;String stuname ;String stusex ;String stuage;/*String stuValues = e.getAttribute("No").getValue();//属性值 String stuValues1 = e.getAttributeValue("No");if (stuValues.equals("102")) {//修改姓名System.out.println(stuValues);e.getChild("stuname").setText("砖⽯王⽼五");//删除元素root.removeContent(e);break;}*/if (i==0) {stuid = e.getChildText("stuid");stuname = e.getChildText("stuname");stusex = e.getChildText("stusex");stuage = e.getChildText("stuage");}else {stuid = e.getChildText("stuid"+i);stuname = e.getChildText("stuname"+i);stusex = e.getChildText("stusex"+i);stuage = e.getChildText("stuage"+i);}System.out.println("属性:"+e.getAttributeValue("No"));System.out.println("学号:"+stuid);System.out.println("姓名:"+stuname);System.out.println("年龄:"+stuage);System.out.println("性别:"+stusex);System.out.println("--------------------");}}}。
JavaDOM4J⽅式⽣成XML的⽅法使⽤DOM4J⽅式⽣成XML⽂件的步骤如下:引⼊JAR包通过DocumentHelper类的createDocument()创建Document对象通过Document的addElement()⽅法创建节点通过Element的addAttribute()⽅法为节点添加属性通过Element的setText()⽅法为节点设置内容通过OutputFormat的createPrettyPrint()⽅法创建OutputFormat对象(会⾃动缩进、换⾏)创建XMLWriter对象,将⽬的⽂件包装成OutputStream传⼊构造⽅法中,并将OutputFormat对象⼀并传⼊其中通过XMLWriter的write()⽅法⽣成XML⽂件,并将Document对象作为参数传⼊关闭XMLWriter对象下⾯给出完整代码:package util;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class XMLUtils {public void CreateXMLByDOM4J(File dest) {// 创建Document对象Document document = DocumentHelper.createDocument();// 创建根节点Element rss = document.addElement("rss");//为rss根节点添加属性rss.addAttribute("version", "2.0");// 创建channel⼦节点Element channel = rss.addElement("channel");// 创建title⼦节点Element title = channel.addElement("title");// 设置title节点的值title.setText("<![CDATA[上海移动互联⽹产业促进中⼼正式揭牌 ]]>");// 创建输出格式(OutputFormat对象)OutputFormat format = OutputFormat.createPrettyPrint();///设置输出⽂件的编码// format.setEncoding("GBK");try {// 创建XMLWriter对象XMLWriter writer = new XMLWriter(new FileOutputStream(dest), format);//设置不⾃动进⾏转义writer.setEscapeText(false);// ⽣成XML⽂件writer.write(document);//关闭XMLWriter对象writer.close();} catch (IOException e) {e.printStackTrace();}}}若想⾃定义XML⽂件的编码⽅式,可使⽤OutputFormat对象的setEncoding()⽅法设置:///设置输出⽂件的编码format.setEncoding("GBK");DOM4J会对某些特殊字符进⾏⾃动转义,若不想让DOM4J进⾏⾃动转义,我们可以通过XMLWriter的setEscapeText()⽅法进⾏设置。
Java中使⽤DOM4J来⽣成xml⽂件和解析xml⽂件⼀、前⾔现在有不少需求,是需要我们解析xml⽂件中的数据,然后导⼊到数据库中,当然解析xml⽂件也有好多种⽅法,⼩编觉得还是DOM4J⽤的最多最⼴泛也最好理解的吧.⼩编也是最近需求⾥遇到了,就来整理⼀下⾃⼰的理解,只适合刚刚学习的,⼀起理解!今天我们把解析xml⽂件和⽣成xml⽂件在⼀起来展⽰.⼆、准备依赖<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency>三、⽣成xml⽂件⽣成标准展⽰⽣成xml代码/*** 使⽤DOM4J⽣成xml⽅法*/public static void createXml(){try {// 创建document对象Document document = DocumentHelper.createDocument();// 创建根节点bookRootElement StudentRoot = document.addElement("StudentRoot");// 向根节点中添加第⼀个节点Element book1 = StudentRoot.addElement("student");// 向⼦节点中添加属性book1.addAttribute("id","1");// 向节点中添加⼦节点Element name = book1.addElement("name");// 向⼦节点赋值name.setText("⼩乔");Element price = book1.addElement("age");price.setText("18");// 向根节点中添加第⼆个节点Element book2 = StudentRoot.addElement("student");book2.addAttribute("id","2").addElement("name").setText("⼤桥");book2.addElement("age").setText("20");// 向根节点中添加第三个节点Element book3 = StudentRoot.addElement("student");book3.addAttribute("id","3").addElement("name").setText("孙策");book3.addElement("age").setText("21");// 设置⽣成xml的格式OutputFormat of = OutputFormat.createPrettyPrint();// 设置编码格式of.setEncoding("UTF-8");// ⽣成xml⽂件File file = new File("E:\\student.xml");if (file.exists()){file.delete();}//创建⼀个xml⽂档编辑器XMLWriter writer = new XMLWriter(new FileOutputStream(file), of);//把刚刚创建的document放到⽂档编辑器中writer.write(document);writer.close();} catch (Exception e) {e.printStackTrace();}}四、解析xml⽂件解析xml的⽂件就是刚刚导出的那个样⼦,我们展⽰两种情况,⼀个是知道属性名字和⼦元素名字的我们把解析的xml ⽂件数据放到实体类中.不知道的就直接打印到控制台.实体类展⽰import lombok.Data;@Datapublic class Student {private int id;private String name;private int age;}解析xml⽂件⽅法public static void analysis(){// 把要解析的xml变成file⽂件File file = new File("E:\\student.xml");// 获取解析器对象SAXReader reader = new SAXReader();// 把⽂件解析成document树Document document = null;try {document = reader.read(file);} catch (DocumentException e) {e.printStackTrace();}// 获取根节点Element studentRoot = document.getRootElement();// 获取根节点中所有节点List<Element> elements = studentRoot.elements();// 存放xml中节点的数据集合List<Student> list = new ArrayList<>();// 便利所有节点for (Element child : elements) {Student student = new Student();//已知属性名情况下student.setId(Integer.parseInt(child.attributeValue("id")));//获取属性的数据//已知⼦元素名的情况下student.setName(child.elementText("name"));//获取元素中值student.setAge(Integer.parseInt(child.elementText("age")));//获取元素中值list.add(student);//未知属性名情况下List<Attribute> attributes = child.attributes();for (Attribute attribute : attributes) {System.out.println(attribute.getName() + "---> " + attribute.getValue());}//未知⼦元素名情况下List<Element> elementList = child.elements();for (Element ele : elementList) {System.out.println(ele.getName() + "--->" + ele.getText());}}//把解析xml出来的数据集合打印list.forEach(x-> System.out.println(x));}解析结果展⽰五、总结这样我们就把DOM4J来⽣成xml⽂件和解析xml⽂件就都操作完成了,有什么问题留⾔哦!!谢谢⼤家。
在Java中,将表的一条数据转为XML文件是一个常见的操作。
本文将介绍如何使用Java来实现这一功能,并提供了详细的代码示例。
1. 确定需要转换的数据我们需要确定需要转换为XML文件的数据。
通常情况下,这些数据来自于数据库中的某张表的一条记录。
在本文的示例中,我们假设我们需要将一条学生的记录转为XML文件。
2. 创建数据模型在Java中,我们通常会使用对象来表示数据。
我们首先需要创建一个学生对象,并为该对象添加相应的属性,如学生的尊称、芳龄、性别等。
```javapublic class Student {private String name;private int age;private String gender;// 省略了getter和setter方法}```3. 将数据转为XML在Java中,我们通常会使用第三方库来帮助我们将数据转为XML文件。
在本文的示例中,我们将使用dom4j这个开源的XML解析库来实现数据到XML的转换。
```javapublic class XMLConverter {public String convertToXML(Student student) {Document document =DocumentHelper.createDocument();Element root = document.addElement("student");root.addElement("name").addText(student.getName());root.addElement("age").addText(String.valueOf(student.getAge( )));root.addElement("gender").addText(student.getGender());return document.asXML();}}```4. 测试转换结果我们需要编写一个测试类来验证我们的转换是否成功。