Java 反射原理完成带DTD约束的XML文档的生成

1JDOM解析

2流操作

3DTD约束文档




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 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("生成完毕。");
 
}


}

DTD (Document Type Definition) 和 XML Schema 是用于规范 XML 文档结构的两种常见方法。 1. DTD (Document Type Definition): DTD 是一种简单的元数据语言,它使用一系列元素声明、属性声明和实体定义来描述 XML 文档的结构。通过DTD,你可以指定哪些标签是必需的,它们可以嵌套多少次,以及允许什么样的属性值。例如: ``` <!DOCTYPE myDoc [ <!ELEMENT root (element1, element2)> <!ELEMENT element1 (#PCDATA)> <!ATTLIST element1 attr1 CDATA #REQUIRED> ]> <myDoc> <element1 attr1="value1">内容</element1> </myDoc> ``` 在这个例子中,`root` 元素必须包含 `element1` 和 `element2`,且 `element1` 的 `attr1` 属性是必填的。 2. XML Schema: XML Schema 提供了一个更强大的框架,使用 XML 来定义复杂的结构规则和数据类型。它可以验证文档的内容、数据类型、命名空间等。例如: ```xml <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="person" type="PersonType"/> <xsd:complexType name="PersonType"> <xsd:sequence> <xsd:element name="firstName" type="xsd:string"/> <xsd:element name="lastName" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="age" type="xsd:integer"/> </xsd:complexType> </xsd:schema> ``` 这里的 `person` 元素需要包含 `firstName` 和 `lastName` 子元素,同时有 `age` 属性。 创建 XML 文档时,如果你指定了 DTDXML Schema,工具如 XML 编辑器会在生成文档前检查其是否符合约束。如果文档不符合,编辑器通常会给出错误提示以便修正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值