`
marb
  • 浏览: 422282 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

xsd文件合并

阅读更多

在用SDO的 HelperContext加载xsd时,发现同样的namespace,它只加载一次(应该算bug吧?!),也就是说如果有相同的namespace的话,第二次加载的xsd里的类型将找不到,现在解决的方式是合并所有的namespace相同的xsd,成为一个新的xsd,然后让HelperContext加载,这样就避免了上述问题

 

/**
	 * 将相同namespace的xsd合并成一个xsd并以namespace为key装入Map
	 * @param xsdMap
	 * @param type
	 */
	private static void setXSDString(Map xsdMap,String[] type){
		for(int i=0;i<type.length;i++){
			String xsd = type[i].trim();
			String nameSpace = getNameSpaceFromSchema(xsd);
			//1、替换xsd文件前缀
			String srcXSDPrifix = getXSDPrifix(xsd);
			if(!"".equals(srcXSDPrifix))
				xsd = xsd.replaceAll(srcXSDPrifix, "xsd");
			else{
				xsd = xsd.replaceAll("<", "<xsd:");
				xsd = xsd.replaceAll("<xsd:/", "</xsd:");
				for(Iterator it =getXSDType().iterator();it.hasNext();){
					String xsdtype = it.next().toString();
					String typeStr = "type=\""+xsdtype+"\"";
					String destStr = "type=\"xsd:"+xsdtype+"\"";
					if(xsd.indexOf(typeStr)!=-1)
						xsd = xsd.replaceAll(typeStr, destStr);
				}
			}
			
			//2、替换所有的namespace前缀
			List srcTNSPrifix = getTNSPrifix(xsd);
			for(Iterator it=srcTNSPrifix.iterator();it.hasNext();){
				String temp = it.next().toString();
				if(!"".equals(temp))
				    xsd = xsd.replaceAll(it.next().toString()+":", "");
			}
			
			//3、生成xsd内容(除去头和尾)
			String srcContent = xsd.substring(xsd.indexOf(">")+1,xsd.indexOf("</xsd:schema>"));
			//如果map里不存在同样namespace的xsd
			if(!xsdMap.containsKey(nameSpace))
				xsdMap.put(nameSpace, srcContent);
			else{
				//将现有的xsd文件内容合并到之前的xsd文件
				String destContent = xsdMap.get(nameSpace).toString().trim();
				String resultXSD = destContent+srcContent;
				xsdMap.put(nameSpace, resultXSD);	
			}
		}
	}
	/**
	 * 由schema获取其namespace
	 * @param schema
	 * @return
	 */
	private static String getNameSpaceFromSchema(String schema){
		String[] temp = schema.split("targetNamespace");
		String nameSpace = temp[1].split("\"")[1];
		return nameSpace;
	}
	/**
	 * 获取namspace前缀
	 * @param schema
	 * @return
	 */
	private static List getTNSPrifix(String schema){
		List prifixs = new ArrayList();
		String nameSpace = getNameSpaceFromSchema(schema);
		String handStr = schema.substring(0, schema.indexOf(">")+1);
		String[] strs = handStr.split("\""+nameSpace+"\"");
		for(int i=0;i<strs.length;i++){
			String str = strs[i].trim();
			if(str.lastIndexOf("=")==str.length()-1){
				String tnsPrifix = "";
				if(str.lastIndexOf("xmlns:")!=-1 && "=".equals(str.substring(str.length()-1).trim())&&str.indexOf("targetNamespace")==-1){
					tnsPrifix = str.substring(str.lastIndexOf("xmlns:"),str.length()-1).replaceAll("xmlns:", "").trim();
					prifixs.add(tnsPrifix);
				}
			}
		}
		return prifixs;
	}
	/**
	 * 获取xsd文件前缀
	 * @param schema
	 * @return
	 */
	private static String getXSDPrifix(String schema){
		String handStr = schema.substring(0, schema.indexOf(">")+1);
		String result = "";
		if(handStr.indexOf("<schema")==-1)
			result = handStr.substring(1,handStr.indexOf(":"));
		return result;
	}
	/**
	 * 获取xsd中的基本类型
	 * @return
	 */
	private static List getXSDType(){
		List xsdType = new ArrayList();
		xsdType.add("boolean");
		xsdType.add("double");
		xsdType.add("float");
		xsdType.add("int");
		xsdType.add("long");
		xsdType.add("string");
		xsdType.add("integer");
		xsdType.add("decimal");
		xsdType.add("dateTime");
		xsdType.add("QName");
		xsdType.add("anyURI");
		return xsdType;
	}
 

 

0
0
分享到:
评论

相关推荐

    xml合并工具 gooseeker

    5. **XML Schema验证**:为了确保合并后的XML文件符合特定的结构规范,Gooseeker可能支持XML Schema (XSD)验证,确保合并结果的正确性。 6. **数据一致性检查**:在合并过程中,Gooseeker可能会检查并处理潜在的...

    emf-xsd-Update-2.10.2

    EMF提供了一套完整的工具和服务,包括模型到源代码的生成,反向工程,以及模型之间的比较和合并。 在【压缩包子文件的文件名称列表】中: 1. `content.jar`:这是软件的核心内容,包含了一些核心类库和资源文件,...

    SharePoint XML的智能提示

    2. **合并XSD**:如果两个XSD文件有重叠部分,可以尝试合并它们为一个,确保唯一的目标命名空间。 3. **重新命名命名空间**:在冲突的XSD文件中,更改目标命名空间,使其变得唯一,但这种方法可能会对其他依赖这些...

    支持多格式文件转换PDF

    有时我们需要将多个PDF文件合并成一个,比如在一个项目报告中整合各个章节或者在一个合集中整合多个作品。这个工具简化了这个过程,使用户能够快速有效地组合PDF文档。 总结来说,"支持多格式文件转换PDF"工具是一...

    XML文件解析编辑小工具

    除此之外,这款工具可能还包含了其他高级特性,如XML Schema设计、XML编码和解码、XML Diff和Merge(比较和合并XML文件)、XML数据绑定等功能,这些功能使得XML文件的处理更加全面和高效。 总之,"XML文件解析编辑...

    XML - 实验(2) -- Schema

    掌握在XML Schema中如何定义元素和属性,如何使用限制、列表和合并派生自己的简单数据类型,如何定义复杂数据类型,全局/局部元素和数据类型之间的区别;如何将XML Schema文档关联到XML实例数据文档,并完成文档的...

    XSD教程-第5部分(共5部分)-其他有用的地方

    通过`import`和`include`指令,我们可以将不同文件中的模式合并到一起。 再者,XSD的属性组(Attribute Groups)和元素组(Group Reuse)是代码复用的重要工具。属性组允许我们将一组相关的属性定义在一起,然后在...

    扩展XML Schema Validator--MSV

    1. **模式合并**:MSV支持多个XML Schema之间的合并,允许开发者在一个文档中引用并合并多个XSD文件,这样可以在一个地方定义和管理复杂的数据结构。 2. **导入与包含**:MSV处理XML Schema的导入和包含机制,使得...

    c#.NET上课视频PPT-XML

    - **XSD(XML Schema定义)**:更现代的验证方法,允许定义元素和属性的数据类型,并以`.xsd`文件形式存储。XSD的根元素是`&lt;schema&gt;`,它定义了元素和属性的结构。 **在VS2008中处理XML和XSD**: - 可以在VS2008中...

    Asp.net随机生成图像签名源代码

    8. **SqlMap.xsd**和**SqlMapConfig.xsd**、**provider.xsd**:这些是XML Schema定义文件,用于验证iBATIS配置文件的结构是否符合规范,确保正确解析和执行数据库操作。 通过这个项目,开发者可以学习到ASP.NET如何...

    EditiX.XML.Editor.v2010h

    通常,这些文件需要与其他部分合并才能恢复完整的软件安装包。 知识点详解: 1. **XML基础知识**:XML是一种自描述的语言,其结构严谨,允许用户定义自己的标签来表示数据。XML文档遵循一定的语法规则,例如元素...

    2022年用FileStreams将DTD插入XML中Java教程.docx

    4. **将DTD内容合并到XML文件** 接下来,你需要将DTD文件的内容写入到输出的XML文件中。这里可以使用`BufferedWriter`来写入字节数据。首先,读取DTD文件的内容到一个字符数组,然后将其写入到输出流中。 ```java ...

    工作流XPDL解析器C#版本

    XPDL有其官方定义的XSD,开发者可以利用这个XSD来检查输入文件的有效性。 3. **数据模型构建**:解析器会创建一个表示XPDL流程的内部数据结构,例如类和对象。这些类通常会映射到XPDL元素,如`&lt;process&gt;`, `...

    BPMN2.0标准规范英文

    - `XSD` 文件:XML Schema定义文件,用于验证BPMN XML实例。 - `BPMN20.xsd`:核心BPMN模型的XML Schema。 - `BPMNDI.xsd`:BPMN绘图信息的XML Schema。 - `DC.xsd`:通用绘图属性的XML Schema。 - `DI.xsd`:...

    Kettle教程

    这包括一些高级的数据处理功能,如XSD验证、XSL转换等。 6. 错误处理与日志:Kettle内置了强大的错误处理和日志功能,可以在数据转换过程中实时监控和记录数据的流动情况,帮助用户发现和解决问题。 在Kettle的...

    使用XML创建Excel文档

    - Microsoft提供了XML数据导入功能,允许用户导入符合特定XSD的XML文件,并将其转换为Excel工作簿。 4. **编程接口** - 对于开发人员,可以使用各种编程语言的库来处理XML和Excel之间的转换。例如,Python的`...

    DiffDog2008

    此外,它支持XML Schema(XSD)和DTD(Document Type Definition),可以基于这些规范验证XML文件的合法性,确保比对结果的准确性。 在使用场景上,DiffDog2008适用于多种情境。开发者在代码审查时,可以快速对比...

    WebService_CXF学习

    - XSD to WSDL:支持从 XSD 文件生成 WSDL 文件。 - WSDL to XML:支持从 WSDL 文件生成 XML 示例。 - WSDL to SOAP:支持从 WSDL 文件生成 SOAP 请求。 - WSDL to service:支持从 WSDL 文件生成服务实例。 ##...

    first object XML 编辑器

    7. **文件比较与合并**:对于版本控制或团队协作,文件比较和合并功能可以轻松识别不同版本之间的差异,并协助整合修改。 8. **快捷键与自定义设置**:用户可以根据个人习惯自定义快捷键和界面布局,提升编辑体验。...

Global site tag (gtag.js) - Google Analytics