打印org.eclipse.xsd.XSDSchema对象

原创 2014年11月16日 00:23:53

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

	
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)

本文原文连接: http://blog.csdn.net/bluishglc/article/details/7596118 ,转载请注明出处!有时候你会发现过去一直启动正常的系统,某天启动时会报出形...

EMF-SDO-XSD-SDK-2.1.0(FOR ECLIPSE 3.1).ZIP

  • 2014年12月24日 10:36
  • 20.62MB
  • 下载

Eclipse引用XSD实现XML配置文件提示标签

对于SpringMVC的下载包,XSD文件存放在压缩包里的Schema文件夹里,而且各功能的XSD存放在各自文件夹内,把最新版本的XSD文件取出。 Eclipse软件,依次选择Window--Pre...

JAXB的Eclipse插件(.xsd文件到java类的映射)

JAXB的Eclipse插件(.xsd文件到java类的映射)   一、JAXB的Eclipse插件的下载地址: https://jaxb-workshop.dev.java.net/servle...

eclipse中如何导入本地xsd文件

在学习Spring框架的时候往往需要用到xsd约束文件,但是默认情况下是一超链接的形式,即需要向官网请求,如下图 那么如何导入本地xsd文件呢...

使用JAXB eclipse插件根据XSD文件生成JAVA代码

转自:http://www.cnblogs.com/yjmyzz/p/3532334.html JAXB(Java Architecture for XML Binding)是JDK的一部分...

解决Eclipse的XML验证错误:手动指定XSD文件

Dubbo版本:2.5.3 Eclipse版本:4.5.0   最近刚开始学习Alibaba的Dubbo框架,写一个HelloWorld程序,下面是一个最简单的XML配置文件。 ...

eclipse插件集锦 XML Schema Infoset Model (XSD) 功能:XML Schema Infoset Model 是个参考库提供用于测试,创建或者修改 W3C XML

eclipse插件集锦 XML Schema Infoset Model (XSD)  功能:XML Schema Infoset Model 是个参考库提供用于测试,创建或者修改 W3C X...

JiBx:BindGen命令行--通过Java POJO对象产生bind.xml和xsd文件

JiBx:BindGen命令行--通过Java POJO对象产生bind.xml和xsd文件1. 官网下载JiBx包 最新版本的zip包是: jibx_1_2_6.zip2. 解压 我这里解压后...
  • hills
  • hills
  • 2015年07月03日 14:52
  • 1817
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:打印org.eclipse.xsd.XSDSchema对象
举报原因:
原因补充:

(最多只允许输入30个字)