• 打印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>");
    	}
    
    	
    }
    


  • 相关阅读:
    【转】人类的心理行为模式----《影响力》笔记
    c++类型形参的实参的受限转换
    如何确定网页和查询的相关性
    英语美文摘要
    特殊的字符数组
    c++中的虚函数
    [C#] 常用工具类——应用程序属性信息访问类
    c#常用工具类:文件和二进制转换
    [C#] 常用工具类——文件操作类
    Lamda和Linq语法对比详细
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5141629.html
Copyright © 2020-2023  润新知