java生成xml

java操作xml有许多的框架,jdom,dom4j等等,生成xml也方便。最近项目中有许多地方都需要生成xml,于是想进行二次封装,以便更简单地生成xml。

因为项目中原来使用的是dom4j,就对dom4j进行二次封装。

 


import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;


import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


/**
 * 
 * @author xxoo 
 * 
 */
public class XmlCreater {
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 节点名称
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private String name;
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 节点属性
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private Map<String,String> attr;
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 子节点
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private List<XmlCreater> child;
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 节点值<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private String text;
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>public XmlCreater() {
<span style="white-space:pre">		</span>
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>public static XmlCreater build(String name){
<span style="white-space:pre">		</span>XmlCreater bean = new XmlCreater();
<span style="white-space:pre">		</span>bean.setName(name);
<span style="white-space:pre">		</span>return bean;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>public static XmlCreater build4StrChild(String name,String text){
<span style="white-space:pre">		</span>XmlCreater bean = new XmlCreater();
<span style="white-space:pre">		</span>bean.setText(text);
<span style="white-space:pre">		</span>bean.setName(name);
<span style="white-space:pre">		</span>return bean;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>public static XmlCreater build4ListChild(String name,List child){
<span style="white-space:pre">		</span>XmlCreater bean = new XmlCreater();
<span style="white-space:pre">		</span>bean.setChild(child);
<span style="white-space:pre">		</span>bean.setName(name);
<span style="white-space:pre">		</span>return bean;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>/***
<span style="white-space:pre">	</span> * 增加子节点
<span style="white-space:pre">	</span> * @param bean
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public  void  addChild(XmlCreater bean){
<span style="white-space:pre">		</span>if(this.child==null){
<span style="white-space:pre">			</span>this.child=new ArrayList<XmlCreater>();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>this.child.add(bean);
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 增加一个名称为name,值为text的子节点
<span style="white-space:pre">	</span> * @param name
<span style="white-space:pre">	</span> * @param text
<span style="white-space:pre">	</span> * @return 新增的节点
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public  XmlCreater  addChildByText(String name,String text){
<span style="white-space:pre">		</span>XmlCreater bean = build4StrChild(name, text);
<span style="white-space:pre">		</span>addChild(bean);
<span style="white-space:pre">		</span>return bean;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 增加一个名称为name子节点
<span style="white-space:pre">	</span> * @param name
<span style="white-space:pre">	</span> * @return 新增的节点
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public  XmlCreater  addChildByName(String name){
<span style="white-space:pre">		</span>XmlCreater bean =build(name); 
<span style="white-space:pre">		</span>addChild(bean);
<span style="white-space:pre">		</span>return bean ;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 新增节点的属性
<span style="white-space:pre">	</span> * @param name 属性名
<span style="white-space:pre">	</span> * @param value 属性值
<span style="white-space:pre">	</span> * @return
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public XmlCreater addAttr(String name,String value){
<span style="white-space:pre">		</span>if(this.attr==null){
<span style="white-space:pre">			</span>this.attr = new TreeMap<String,String>();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>this.attr.put(name, value);
<span style="white-space:pre">		</span>return this;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>/***
<span style="white-space:pre">	</span> * 利用dom4j 生成对应的xml
<span style="white-space:pre">	</span> * @return
<span style="white-space:pre">	</span> * @throws IOException 
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public  String getXml(){
<span style="white-space:pre">		</span>  XmlCreater xmlBean = this;
<span style="white-space:pre">		</span>  Document dom=DocumentHelper.createDocument();//创建xml文件
<span style="white-space:pre">		</span>  Element ele=dom.addElement(xmlBean.getName());//添加根元素,Xval
<span style="white-space:pre">		</span>  parseElemet(xmlBean, ele);
<span style="white-space:pre">		</span>  String xml=dom.asXML();
<span style="white-space:pre">		</span>  
<span style="white-space:pre">		</span>  return xml;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 是否带xml格式的输出
<span style="white-space:pre">	</span> * @param format
<span style="white-space:pre">	</span> * @return
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>public  String getXml(boolean format){
<span style="white-space:pre">		</span>if(format){
<span style="white-space:pre">			</span>XmlCreater xmlBean = this;
<span style="white-space:pre">			</span>Document dom=DocumentHelper.createDocument();//创建xml文件
<span style="white-space:pre">			</span>Element ele=dom.addElement(xmlBean.getName());//添加根元素,Xval
<span style="white-space:pre">			</span>parseElemet(xmlBean, ele);
<span style="white-space:pre">			</span>  
<span style="white-space:pre">	</span>        OutputFormat xmlFormat = new OutputFormat();  
<span style="white-space:pre">	</span>        // 设置换行 
<span style="white-space:pre">	</span>        xmlFormat.setNewlines(true); 
<span style="white-space:pre">	</span>        // 生成缩进 
<span style="white-space:pre">	</span>        xmlFormat.setIndent(true); 
<span style="white-space:pre">	</span>        // 使用4个空格进行缩进, 可以兼容文本编辑器 
<span style="white-space:pre">	</span>        xmlFormat.setIndent("    "); 
<span style="white-space:pre">	</span>        
<span style="white-space:pre">	</span>        XMLWriter xw = null;
<span style="white-space:pre">			</span>try {
<span style="white-space:pre">				</span>xw = new XMLWriter(xmlFormat);
<span style="white-space:pre">				</span>xw.write(dom);
<span style="white-space:pre">				</span>xw.close();<span style="white-space:pre">	</span>
<span style="white-space:pre">			</span>} catch (IOException e) {
<span style="white-space:pre">				</span>e.printStackTrace();
<span style="white-space:pre">				</span>return null;
<span style="white-space:pre">			</span>}
<span style="white-space:pre">			</span>return xw.toString();
<span style="white-space:pre">		</span>}else{
<span style="white-space:pre">			</span>return getXml();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>private static Element createChild(XmlCreater xmlBean,Element parent){
<span style="white-space:pre">		</span>  Element ele = parent.addElement(xmlBean.getName());
<span style="white-space:pre">		</span>  parseElemet(xmlBean,ele);
<span style="white-space:pre">		</span>  return ele;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>private static void parseElemet(XmlCreater xmlBean,Element ele){
<span style="white-space:pre">		</span> //设置节点内容或者节点的子节点
<span style="white-space:pre">		</span>  if(xmlBean.getText()!=null){//有文本则设置文本
<span style="white-space:pre">			</span>  ele.setText(xmlBean.getText());
<span style="white-space:pre">		</span>  }else if(xmlBean.getChild()!=null){//有子元素则循环遍历
<span style="white-space:pre">			</span>  List<XmlCreater> child = xmlBean.getChild();
<span style="white-space:pre">			</span>  for(XmlCreater bean:child){
<span style="white-space:pre">				</span>  createChild(bean,ele);
<span style="white-space:pre">			</span>  }
<span style="white-space:pre">		</span>  }
<span style="white-space:pre">		</span>  //设置节点的属性
<span style="white-space:pre">		</span>  if(xmlBean.getAttr()!=null){
<span style="white-space:pre">			</span>  Map<String,String> attr = xmlBean.getAttr();
<span style="white-space:pre">			</span>  Iterator<String> ite = attr.keySet().iterator();
<span style="white-space:pre">			</span>  while(ite.hasNext()){
<span style="white-space:pre">				</span>  String k = ite.next();
<span style="white-space:pre">				</span>  ele.addAttribute(k, attr.get(k));
<span style="white-space:pre">			</span>  }
<span style="white-space:pre">		</span>  }
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>public String getName() {
<span style="white-space:pre">		</span>return name;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void setName(String name) {
<span style="white-space:pre">		</span>this.name = name;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public List<XmlCreater> getChild() {
<span style="white-space:pre">		</span>return child;
<span style="white-space:pre">	</span>}




<span style="white-space:pre">	</span>public void setChild(List<XmlCreater> child) {
<span style="white-space:pre">		</span>this.child = child;
<span style="white-space:pre">	</span>}




<span style="white-space:pre">	</span>public String getText() {
<span style="white-space:pre">		</span>return text;
<span style="white-space:pre">	</span>}




<span style="white-space:pre">	</span>public void setText(String text) {
<span style="white-space:pre">		</span>this.text = text;
<span style="white-space:pre">	</span>}




<span style="white-space:pre">	</span>public Map<String, String> getAttr() {
<span style="white-space:pre">		</span>return attr;
<span style="white-space:pre">	</span>}




<span style="white-space:pre">	</span>public void setAttr(Map<String, String> attr) {
<span style="white-space:pre">		</span>this.attr = attr;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>
}
//demo

</pre><pre name="code" class="java">XmlCreater xmlCreater = XmlCreater.build("user");//根节点user
		xmlCreater.addChildByText("age", "40");//新增子节点age,value为40
		xmlCreater.addChildByText("name", "jim").addAttr("a1", "v1").addAttr("a2", "v2");//新增子节点name,value为jim,以及节点的属性
		
		XmlCreater family = XmlCreater.build("family");//新增子节点family,family还有子节点为“wife”和“son”
		family.addChildByText("wife", "mariy");
		family.addChildByText("son", "white");
		xmlCreater.addChild(family);
		
		System.out.println("------不带格式----");
		System.out.println(xmlCreater.getXml());//输出xml
		System.out.println("------带格式----");
		System.out.println(xmlCreater.getXml(true));//输出xml


//输出结果

XmlCreater xmlCreater = XmlCreater.build("user");//根节点user
		xmlCreater.addChildByText("age", "40");//新增子节点age,value为40
		xmlCreater.addChildByText("name", "jim").addAttr("a1", "v1").addAttr("a2", "v2");//新增子节点name,value为jim,以及节点的属性
		
		XmlCreater family = XmlCreater.build("family");//新增子节点family,family还有子节点为“wife”和“son”
		family.addChildByText("wife", "mariy");
		family.addChildByText("son", "white");
		xmlCreater.addChild(family);
		
		System.out.println("------不带格式----");
		System.out.println(xmlCreater.getXml());//输出xml
		System.out.println("------带格式----");
		System.out.println(xmlCreater.getXml(true));//输出xml



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值