[置顶] 打印org.eclipse.xsd.XSDSchema对象

标签: Eclipse XSDXSDSchema
2053人阅读 评论(0) 收藏 举报
分类:

因为网上关于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>");
	}

	
}


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:383622次
    • 积分:6305
    • 等级:
    • 排名:第4082名
    • 原创:219篇
    • 转载:0篇
    • 译文:5篇
    • 评论:157条
    博客专栏