本发明属于数据管理领域,涉及一种文件的解析方法及生成方法,尤其涉及一种xsd格式文件的解析方法与生成方法。
背景技术:
xsd即xmlschema语言,描述了xml文档的结构,可以通过xsd指定一个xml文档所允许的结构和内容,并可据此检查一个xml文档是否是有效的,它是dtd的替代品,xmlschema描述了xml文档的结构。可以用一个指定的xmlschema来验证某个xml文档,以检查该xml文档是否符合其要求。文档设计者可以通过xmlschema指定一个xml文档所允许的结构和内容,并可据此检查一个xml文档是否是有效的。xmlschema本身是一个xml文档,它符合xml语法结构。可以用通用的xml解析器解析它。
一个xmlschema会定义:文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值,xsd是dtd替代者的原因,一是据将来的条件可扩展,二是比dtd丰富和有用,三是用xml书写,四是支持数据类型,五是支持命名空间。
在现有技术中数据集成类项目中通常用xsd文件作为需要集成的数据内容描述的主要因有:可扩展、支持数据类型、支持命名空间等。xsd本身是一个xml文档,它符合xml语法结构,所以虽可用通用的xml解析器解析它,然而并没有解析与生成复杂xsd格式文件的类库供直接调用使用。
技术方案
为了解决背景技术中存在的上述技术问题,本发明提供了一种可以直接调用本发明dll类库中的相关方法对xsd文件进行数据解析与生成的xsd格式文件的解析方法与生成方法。
为了实现上述目的,本发明采用如下技术方案:
一种xsd格式文件的解析方法,其特征在于:所述xsd格式文件的解析方法包括以下步骤:
1)初始化streamreader类将xsd文件路径带入,将xsd文件转换为stream流文件,其次初始化xmldocument类对象,通过对象的load方法将该文件流转换为对应的xmldocument类;
2)调用xmldocument类内部的documentelement方法,将xmldocument类转换为对应的xmlelement文档类,通过内部的属性值childnodes,获取该文档的n个node节点块,节点对象代表xmlelement文档树中一个单独的节点;
3)将拆分出来的node节点块通过点localname的属性获取对应的节点的名称,再通过attributes方法获取该节点的属性集合;
4)最终完成对xsd的解析,生成对应的xsd解析类。
上述步骤3)的具体实现方式是:利用c#的反射机制,提取element属性值,获取的每个节点块对应的属性值以及类型值,通过自定义类对象并赋值的方式,将node节点转换为节点类。
一种xsd格式文件的生成方法,其特征在于:所述xsd格式文件的生成方法包括以下步骤:
1)初始化streamreader类将xsd文件路径带入,将xsd文件转换为stream流文件,其次初始化xmldocument类对象,通过对象的load方法将该文件流转换为对应的xmldocument类;
2)调用xmldocument类内部的documentelement方法,将xmldocument类转换为对应的xmlelement文档类,通过内部的属性值childnodes,获取该文档的n个node节点块,节点对象代表xmlelement文档树中一个单独的节点;
3)将拆分出来的node节点块通过点localname的属性获取对应的节点的名称,再通过attributes方法获取该节点的属性集合;
4)最终完成对xsd的解析,生成对应的xsd解析类;
5)将xsd解析类的对应属性以及属性值赋值给新定义的xmlattribute类对象,初始化时给与对应的类名称和值;
6)将节点类型类的属性名以及属性值衣服赋值给新定义的xmlelement类对象,通过初始化带入方式赋值,节点类型类与节点类型xmlelement的属性名称以及属性值必须保持完全一致;
7)定义一个新的xmldocument类对象,将上述节点类型xmlelement通过add的方法加入到xmldocument的root根节点属性下,从而完成对xmldocument文档信息类的组装;
8)创建一个memorystream文件流对象,利用xmldocument文档信息类的save方法将xmldocument文档进行保存操作。
上述步骤3)的具体实现方式是:利用c#的反射机制,提取element属性值,获取的每个节点块对应的属性值以及类型值,通过自定义类对象并赋值的方式,将node节点转换为节点类。
上述步骤5)的具体实现方式是:通过该方式将xsd类转换为多个节点类型类,此方式利用的c#的反射填充element属性值机制,形成的节点类型类必须与xsd类属性名以及值完全一致。
一种用于实现xsd格式文件的解析方法或xsd格式文件的生成方法的操作系统,其特征在于:所述操作系统包括:
读取模块:在xsd格式文件进行解析过程中,通过streamreader类将选定的xsd文件进行读取操作,将其转换为stream文件流形式;在xsd格式文件进行生成过程中,将xmldocument文档信息转换为xsd文档信息,为展示xsd文件生成的成果展示;
解析模块:在xsd格式文件进行解析过程中,将读取模块的xsd文件流进行解析,从而将xsd文件流转换为xmldocument文档信息类型,在xsd格式文件进行生成过程中,将xmldocument文档转换为xsd文件信息;
节点类型模块:在xsd格式文件进行解析过程中,将xmldocument文档信息转化为节点类型,即用特定的字符串代表特定的节点,包含节点的类型以及值,在xsd格式文件进行生成过程中,将节点类型类转换为对应的节点类型,必须与节点类型类一一对应,完全匹配;
节点类模块:在xsd格式文件进行解析过程中,将节点类型转化为一一对应的节点类或者对象;节点类必须与节点类型相对应;在xsd格式文件进行生成过程中,将xsd类通过反射提取机制,转换为节点类;
xsd类模块:在xsd格式文件进行解析过程中,将节点类组合生成对应的xsd类,实则为c#对象;展示对xsd文件的解析成果;在xsd格式文件进行生成过程中,将xsd类通过反射填充机制转换为节点类,开始进一步的生成xsd文件操作。
本发明的优点是:
本发明提供了一种xsd格式文件的解析方法、xsd格式文件的生成方法以及用于实现两种方法的操作系统,本发明利用c#反射、通用的xml解析器等技术对xsd格式文件的解析与生成进行了封装,只要符合指定格式要求,可以直接调用本发明dll类库中的相关方法对xsd文件进行数据解析与生成等操作。本发明针对将来的额外内容是可扩展的,内容比文档类型定义丰富,作用也更大,解析与生成复杂xsd格式文件的类库可供直接调用。
附图说明
图1是本发明所提供操作系统的框图。
具体实施方式
本发明提供了一种xsd格式文件的解析方法,该方法包括:
1)初始化streamreader类将xsd文件路径带入,可将xsd文件转换为stream流文件,其次初始化xmldocument类对象,通过对象的load方法将该文件流转换为对应的xmldocument类;
2)调用xmldocument类内部的documentelement方法,将xmldocument类转换为对应的xmlelement文档类,通过内部的属性值childnodes,获取该文档的n个node节点块,节点对象代表xmlelement文档树中一个单独的节点,例如:p1、p2、p3……pn;
3)将拆分出来的node节点块通过点localname的属性获取对应的节点的名称,再通过attributes方法获取该节点的属性集合,此方式利用了c#的反射机制,提取element属性值,获取的每个节点块对应的属性值以及类型值,通过自定义类对象并赋值的方式,将node节点转换为节点类,其大小写必须严格一致,例如:p′1、p′2、p′3……p′n;
4)最终完成对xsd的解析,生成对应的xsd解析类。
同时,本发明还提供了一种xsd格式文件的生成方法,该方法包括以下步骤:
1)初始化streamreader类将xsd文件路径带入,可将xsd文件转换为stream流文件,其次初始化xmldocument类对象,通过对象的load方法将该文件流转换为对应的xmldocument类;
2)调用xmldocument类内部的documentelement方法,将xmldocument类转换为对应的xmlelement文档类,通过内部的属性值childnodes,获取该文档的n个node节点块,节点对象代表xmlelement文档树中一个单独的节点,例如:p1、p2、p3……pn;
3)将拆分出来的node节点块通过点localname的属性获取对应的节点的名称,再通过attributes方法获取该节点的属性集合,此方式利用了c#的反射机制,提取element属性值,获取的每个节点块对应的属性值以及类型值,通过自定义类对象并赋值的方式,将node节点转换为节点类,其大小写必须严格一致,例如:p′1、p′2、p′3……p′n;
4)最终完成对xsd的解析,生成对应的xsd解析类;
5)将xsd解析类的对应属性以及属性值赋值给新定义的xmlattribute类对象,初始化时给与对应的类名称和值,通过该方式将xsd类转换为多个节点类型类,此方式利用的c#的反射填充element属性值机制,形成的节点类型类必须与xsd类属性名以及值完全一致,例如:p′1、p′2、p′3……p′n;
6)将节点类型类的属性名以及属性值衣服赋值给新定义的xmlelement类对象,通过初始化带入方式赋值,节点类型类与节点类型xmlelement的属性名称以及属性值必须保持完全一致,例如p1、p2、p3……pn;
7)定义一个新的xmldocument类对象,将上述节点类型xmlelement通过add的方法加入到xmldocument的root根节点属性下,从而完成对xmldocument文档信息类的组装;
8)创建一个memorystream文件流对象,利用xmldocument文档信息类的save方法将xmldocument文档进行保存操作;
本发明在提供上述两种方法的同时,还提供了一种用于实现该方法的操作系统,参见图1,该操作系统包括:
读取模块:在解析过程中,通过streamreader类将选定的xsd文件进行读取操作,将其转换为stream文件流形式;在生成过程中,将xmldocument文档信息转换为xsd文档信息,为展示xsd文件生成的成果展示;
解析模块:在解析xsd文件的过程中,将读取模块的xsd文件流进行解析,从而将xsd文件流转换为xmldocument文档信息类型,在生成xsd文件的过程中,将xmldocument文档转换为xsd文件信息;
节点类型模块:在解析过程中,将xmldocument文档信息转化为节点类型,即用特定的字符串代表特定的节点,包含节点的类型以及值,在生成过程中,将节点类型类转换为对应的节点类型,必须与节点类型类一一对应,完全匹配;
节点类模块:在解析过程中,将节点类型转化为一一对应的节点类或者对象;节点类必须与节点类型相对应;在生成过程中,将xsd类通过反射提取机制,转换为节点类;
xsd类模块:在解析过程中,将节点类组合生成对应的xsd类,实则为c#对象;展示对xsd文件的解析成果;在生成过程中,将xsd类通过反射填充机制转换为节点类,从而开始进一步的生成xsd文件操作。
1.一种xsd格式文件的解析方法,其特征在于:所述xsd格式文件的解析方法包括以下步骤:
1)初始化streamreader类将xsd文件路径带入,将xsd文件转换为stream流文件,其次初始化xmldocument类对象,通过对象的load方法将该文件流转换为对应的xmldocument类;
2)调用xmldocument类内部的documentelement方法,将xmldocument类转换为对应的xmlelement文档类,通过内部的属性值childnodes,获取该文档的n个node节点块,节点对象代表xmlelement文档树中一个单独的节点;
3)将拆分出来的node节点块通过点localname的属性获取对应的节点的名称,再通过attributes方法获取该节点的属性集合;
4)最终完成对xsd的解析,生成对应的xsd解析类。
2.根据权利要求1所述的xsd格式文件的解析方法,其特征在于:所述步骤3)的具体实现方式是:利用c#的反射机制,提取element属性值,获取的每个节点块对应的属性值以及类型值,通过自定义类对象并赋值的方式,将node节点转换为节点类。
3.一种xsd格式文件的生成方法,其特征在于:所述xsd格式文件的生成方法包括以下步骤:
1)初始化streamreader类将xsd文件路径带入,将xsd文件转换为stream流文件,其次初始化xmldocument类对象,通过对象的load方法将该文件流转换为对应的xmldocument类;
2)调用xmldocument类内部的documentelement方法,将xmldocument类转换为对应的xmlelement文档类,通过内部的属性值childnodes,获取该文档的n个node节点块,节点对象代表xmlelement文档树中一个单独的节点;
3)将拆分出来的node节点块通过点localname的属性获取对应的节点的名称,再通过attributes方法获取该节点的属性集合;
4)最终完成对xsd的解析,生成对应的xsd解析类;
5)将xsd解析类的对应属性以及属性值赋值给新定义的xmlattribute类对象,初始化时给与对应的类名称和值;
6)将节点类型类的属性名以及属性值衣服赋值给新定义的xmlelement类对象,通过初始化带入方式赋值,节点类型类与节点类型xmlelement的属性名称以及属性值必须保持完全一致;
7)定义一个新的xmldocument类对象,将上述节点类型xmlelement通过add的方法加入到xmldocument的root根节点属性下,从而完成对xmldocument文档信息类的组装;
8)创建一个memorystream文件流对象,利用xmldocument文档信息类的save方法将xmldocument文档进行保存操作。
4.根据权利要求3所述的xsd格式文件的生成方法,其特征在于:所述步骤3)的具体实现方式是:利用c#的反射机制,提取element属性值,获取的每个节点块对应的属性值以及类型值,通过自定义类对象并赋值的方式,将node节点转换为节点类。
5.根据权利要求4所述的xsd格式文件的生成方法,其特征在于:所述步骤5)的具体实现方式是:通过该方式将xsd类转换为多个节点类型类,此方式利用的c#的反射填充element属性值机制,形成的节点类型类必须与xsd类属性名以及值完全一致。
6.一种用于实现xsd格式文件的解析方法或xsd格式文件的生成方法的操作系统,其特征在于:所述操作系统包括:
读取模块:在xsd格式文件进行解析过程中,通过streamreader类将选定的xsd文件进行读取操作,将其转换为stream文件流形式;在xsd格式文件进行生成过程中,将xmldocument文档信息转换为xsd文档信息,为展示xsd文件生成的成果展示;
解析模块:在xsd格式文件进行解析过程中,将读取模块的xsd文件流进行解析,从而将xsd文件流转换为xmldocument文档信息类型,在xsd格式文件进行生成过程中,将xmldocument文档转换为xsd文件信息;
节点类型模块:在xsd格式文件进行解析过程中,将xmldocument文档信息转化为节点类型,即用特定的字符串代表特定的节点,包含节点的类型以及值,在xsd格式文件进行生成过程中,将节点类型类转换为对应的节点类型,必须与节点类型类一一对应,完全匹配;
节点类模块:在xsd格式文件进行解析过程中,将节点类型转化为一一对应的节点类或者对象;节点类必须与节点类型相对应;在xsd格式文件进行生成过程中,将xsd类通过反射提取机制,转换为节点类;
xsd类模块:在xsd格式文件进行解析过程中,将节点类组合生成对应的xsd类,实则为c#对象;展示对xsd文件的解析成果;在xsd格式文件进行生成过程中,将xsd类通过反射填充机制转换为节点类,开始进一步的生成xsd文件操作。
技术总结