JAVA 利用反射原理完成带约束XML文档的生成

package ReFlectXML;


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;


import org.jdom.DocType;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;


public class XMLAndReflect {
/**
* Document 类 addContent方法
* Element类 setAttribute方法 setText方法 addContent方法
* XMLOutputter类 output方法
* FileOutputStream类
* Format类 getPrettyFormat方法setEncoding方法 setIndent方法
*/

public static void main(String[] args) throws Exception, NoSuchMethodException {


//Document类
Class documentclass=Class.forName("org.jdom.Document");
//Method documentMethod=documentclass.getMethod("addContent", new Class[]{Element.class});//方法对象
Constructor documentconstrutor=documentclass.getConstructor(new Class[]{});
Object Objdocument=documentconstrutor.newInstance(new Object[]{});
Document document=(Document)Objdocument;//


//Element类
Class elementclass = Class.forName("org.jdom.Element");
/*Method setAttributemothod=elementclass.getMethod("setAttribute", new Class[]{String.class,String.class});//属性方法对象
Method setTextmothod=elementclass.getMethod("setText", new Class[]{String.class});//元素的赋值方法对象
Method mothod=elementclass.getMethod("addContent", new Class[]{Element.class});//添加元素方法对象
*/
Constructor elementConstructor=elementclass.getConstructor(new Class[]{String.class});
//Element类  -----声明好标签
Object RootelementObj=elementConstructor.newInstance("图书管理系统");//根Object对象
Element Root=(Element)RootelementObj;
Object Child1elementObj=elementConstructor.newInstance("图书");//父元素Object对象
Element Child=(Element)Child1elementObj;
Object ChildNode1elementObj=elementConstructor.newInstance("书名");//子元素Object对象
Element ChildNode1=(Element)ChildNode1elementObj;
//Element类  -----标签赋值以及设置属性 Child.setAttribute("id","A001");、

Object Child1elementObj1=elementConstructor.newInstance("图书");//父元素Object对象
Element Child1=(Element)Child1elementObj1;
Object ChildNode1elementObj1=elementConstructor.newInstance("书名");//子元素Object对象
Element ChildNode11=(Element)ChildNode1elementObj1;

ChildNode1.setText("地狱来的天堂来使");
Child.setAttribute("id", "A001");
Child.addContent(ChildNode1);
 
ChildNode11.setText("有爱的天使");
Child1.setAttribute("id","A002");
Child1.addContent(ChildNode11);
 
Root.addContent(Child);
Root.addContent(Child1);
/**
 * 添加一个约束的语句 DocType并未用反射
 */
DocType doc = new DocType("per"); // DOCTYPE per SYSTEM "per.dtd"
doc.setSystemID("per.dtd");
document.setDocType(doc);
document.addContent(Root);
//XML文档
Class fie=Class.forName("java.io.FileOutputStream");  
Constructor file=fie.getConstructor(new Class[]{String.class});
Object fileObj=file.newInstance("Book.xml");
FileOutputStream xmlfile=(FileOutputStream)fileObj;
//XMLOutputter反射
Class xml=Class.forName("org.jdom.output.XMLOutputter");
Constructor xmlConstructor=xml.getConstructor(new Class[]{Format.class});
Object ObjXml=xmlConstructor.newInstance(Format.getPrettyFormat().setEncoding("utf-8").setIndent("    "));
XMLOutputter out=(XMLOutputter)ObjXml;  
out.output(document, xmlfile);
System.out.println("生成完毕。");
 
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值