打印org.eclipse.xsd.XSDSchema对象
由于网上关于Eclipse XSD的中文资料比較少,可是有的时候。我们须要使用Eclipse XSD的API去构造或者改动一个XSD文件。
那么当我们创建了org.eclipse.xsd.XSDSchema的对象,并已经在里面加入或者改动很多的元素类型等信息后。我们想知道我们的加入或者改动是否有效。那么这个时候我们应该怎么办呢?
有两种方式,
(1)我们把生成的org.eclipse.xsd.XSDSchema的对象,写到一个文件中面去
(2)第二种方式就是直接把XSDSchema对象转成一个字符串,然后把XSDSchema代码的XSD打印出来。
在我们的代码调试过程中。当然是另外一种方式更为的方便和快捷。
其详细的代码方法例如以下:
import org.eclipse.xsd.XSDImport; import org.eclipse.xsd.XSDInclude; import org.eclipse.xsd.XSDRedefine; import org.eclipse.xsd.XSDSchema; import org.eclipse.xsd.XSDSchemaDirective; import org.eclipse.xsd.util.XSDResourceImpl; import org.w3c.dom.Element; public class SchemaPrintService { public static void printSchema(XSDSchema xsdSchema){ System.out.println("<!-- ===== Schema Composition ====="); printDirectives(" ", xsdSchema); System.out.println("-->"); System.out.println("<!-- [ " + xsdSchema.getSchemaLocation() + " ] -->"); xsdSchema.updateElement(); Element element = xsdSchema.getElement(); if (element != null){ // Print the serialization of the model. XSDResourceImpl.serialize(System.out, element); } } private static void printSchemaStart(XSDSchema xsdSchema) { System.out.print("<schema targetNamespace=\""); if (xsdSchema.getTargetNamespace() != null) { System.out.print(xsdSchema.getTargetNamespace()); } System.out.print("\" schemaLocation=\""); if (xsdSchema.getSchemaLocation() != null) { System.out.print(xsdSchema.getSchemaLocation()); } System.out.print("\">"); } private static void printDirectives(String indent, XSDSchema xsdSchema) { System.out.print(indent); printSchemaStart(xsdSchema); System.out.println(); if (!xsdSchema.getReferencingDirectives().isEmpty()) { System.out.println(indent + " <referencingDirectives>"); for (XSDSchemaDirective xsdSchemaDirective : xsdSchema.getReferencingDirectives()) { XSDSchema referencingSchema = xsdSchemaDirective.getSchema(); System.out.print(indent + " "); printSchemaStart(referencingSchema); System.out.println(); System.out.print(indent + " "); if (xsdSchemaDirective instanceof XSDImport) { XSDImport xsdImport = (XSDImport) xsdSchemaDirective; System.out.print("<import namespace=\""); if (xsdImport.getNamespace() != null) { System.out.print(xsdImport.getNamespace()); } System.out.print("\" schemaLocation=\""); } else if (xsdSchemaDirective instanceof XSDRedefine) { System.out.print("<redefine schemaLocation=\""); } else if (xsdSchemaDirective instanceof XSDInclude) { System.out.print("<include schemaLocation=\""); } if (xsdSchemaDirective.getSchemaLocation() != null) { System.out.print(xsdSchemaDirective.getSchemaLocation()); } System.out.println("\"/>"); System.out.println(indent + " </schema>"); } System.out.println(indent + " </referencingDirectives>"); } if (!xsdSchema.getIncorporatedVersions().isEmpty()) { System.out.println(indent + " <incorporatedVersions>"); for (XSDSchema incorporatedVersion : xsdSchema .getIncorporatedVersions()) { printDirectives(indent + " ", incorporatedVersion); } System.out.println(indent + " </incorporatedVersions>"); } System.out.println(indent + "</schema>"); } }