xsd与xml和类(class)对象之间的互相转换

.

第一:通过现有的已经写好的xsd来生成class(.cs)文件。

在您Visual Studio的安装目录下的SDKv2.0Bin中有个应用程序xsd.exe(通过这个应用程序可以使用xsd来创建类文件)。

具体操作:通过打开Visual Studio 命令提示,可以输入xsd指令来查看一些具体的操作指令的用处,然后通过输入指令xsd /c 你xsd文件所在的绝对的物理路径,输入完成后回车。这样,类文件就创建成功了(文件的路径为Visual Studio的安装目录下的VC目录下面。)。

注意:xsd文件中各属性和元素的数据类型必须为C#中现有的数据类型。

第二:利用上一步生成的类文件(.cs)来创建类的实例以及赋值,然后将这些数据创建和写入xml文件中。

将已经创建好的类的实例(XMLObject)和要创建的XML文件的路径,然后将参数赋给下面的CreateXMLFile方法。这样XML文件和数据就会被写入了。

    ///

        /// Create and Write Xml Document

        ///

        /// XML Class Object

        /// Create XML File Url

        public void CreateXMLFile(object XMLObject, string XMLDocumentUrl)

    {

            try

       {

                using(TextWriter textWriter = new StreamWriter(XMLDocumentUrl))

{

                XmlSerializer xmlSerializer = new XmlSerializer(XMLObject.GetType());

                xmlSerializer.Serialize(textWriter, XMLObject);

                //textWriter.Close();

}

            }

            catch

         {

            }

        }

第三:将上一步写好的xml文件中的数据读出来赋值给类(class)的声明。

调用下面方法的代码:(如果你的类的名称为XMLClass)

XMLClass XmlObject;

XmlObject=(XMLClass)ReadXMLFile(XmlObject,xml文件的路径);

这样,就生成了类的实例,你就可以直接从这个XmlObject对象中来获取XML文件中的数据了。

     ///

        /// Read XML File

        ///

        /// Class Type

        /// XML File Url

        /// XML Object

        public object ReadXMLFile(object type,string XMLDocumentUrl)

    {

            //object XmlObject;

            try

        {

                //new filestream to open serialized object

                using(FileStream fileStream = new FileStream(XMLDocumentUrl, FileMode.Open))

{

                //new serializer

                XmlSerializer xmlSerializer = new XmlSerializer(type.GetType());

                //deserialize the object

                type = xmlSerializer.Deserialize(fileStream);

                //load it in the list box.

                //fileStream.Close();

}

                return type;

            }

            catch

        {

            }

            return null;

        }

第四:使用XSD来验证XML的合法性:

public class XMLValidator

{

        public XMLValidator(string XSDDocumentUrl, string[] XMLDocumentUrl)

       {

            XSDDocument = XSDDocumentUrl;

            XMLDocuments = XMLDocumentUrl;

        }

        private string[] XMLDocuments;

        private string XSDDocument;

        private XmlValidatingReader myXmlValidatingReader = null;

        private XmlTextReader myXmlTextReader = null;

        private Boolean Success = true;

        public void Run(string TargetNameSpace)

     {

            try

            {

                XmlSchemaCollection myXmlSchemaCollection = new XmlSchemaCollection();

                myXmlSchemaCollection.Add(TargetNameSpace, new XmlTextReader(XSDDocument));

                if (XMLDocuments.Length > 0)

                {

                    //Validator XML File

                    Success = true;

                    string xsddoxument = XSDDocument.Contains("/") ? XSDDocument.Split('/')[XSDDocument.Split('/').Length - 1] : XSDDocument.Split('/')[XSDDocument.Split('/').Length - 1];

                    foreach (string xmldocumenturl in XMLDocuments)

                    {

                        string xmldoxument = xmldocumenturl.Contains("/") ? xmldocumenturl.Split('/')[xmldocumenturl.Split('/').Length - 1] : xmldocumenturl.Split('/')[xmldocumenturl.Split('/').Length - 1];

                        Console.WriteLine();

                        Console.WriteLine("Useing XSD File:" + xsddoxument + " Validator XML File: " + xmldoxument + "  ");

                        myXmlTextReader = new XmlTextReader(xmldocumenturl);

                        myXmlValidatingReader = new XmlValidatingReader(myXmlTextReader);

                        myXmlValidatingReader.Schemas.Add(myXmlSchemaCollection);

                        myXmlValidatingReader.ValidationType = ValidationType.Schema;

                        Validate();

                    }

                }

            }

            catch (Exception e)

            {

                Console.WriteLine("Exception:" + e.ToString());

            }

            finally

            {

                //XmlTextReader

                if (myXmlValidatingReader != null)

                    myXmlValidatingReader.Close();

            }

        }

        private void Validate()

        {

            try

            {

                //The incident set certification procedures

                myXmlValidatingReader.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventHandle);

                //Read XML Data

                while (myXmlValidatingReader.Read()) { }

                Console.WriteLine("Validator Completed: Validator {0} ", (Success == true ? "Success" : "Fiald"));

            }

            catch (XmlException e)

            {

                Console.WriteLine("Xml Exception:" + e.ToString() + " ");

            }

            catch (Exception e)

            {

                Console.WriteLine("Exception:" + e.ToString() + " ");

            }

        }

        public void ValidationEventHandle(object sender, ValidationEventArgs args)

        {

            Success = false;

            Console.WriteLine(" Validator Error:" + args.Message + " ");

            if (args.Severity == XmlSeverityType.Warning)

            {

                Console.WriteLine("Did not find it mandatory certification framework. ");

            }

            else

                if (args.Severity == XmlSeverityType.Error)

                {

                    Console.WriteLine("Examples of document verification, validation error occurred. ");

                }

            if (args.Exception != null)   //XSD Structure validation error

            {

                Console.WriteLine(args.Exception.SourceUri + "," + args.Exception.LinePosition + "," + args.Exception.LineNumber);

            }

        }

    }

 http://www.cnblogs.com/xiaojiangjiang/archive/2008/01/13/886466.html

第五:也可以通过现有的Class来生成XSD.和XML

具体步骤:打开Visual Studio 命令提示,输入csc /t:library 类(.cs)文件的绝对路径 ,回车。xsd文件创建的路径:文件的路径为Visual Studio的安装目录下的VC目录下面,文件的名称一般是schema加上一个随机的序列号,你可以改文件的名称。

注意:这个class必须包含一个空的构造函数,类还要有一些特性(可以从上面的第一步中生成class进行模仿)。

这样就实现了这三者之间的转换了。

xsd与xml和类(class)对象之间的互相转换的更多相关文章

  1. PHP类和对象之间的关系

    类是对象的描述: 类和对象之间的关系类似于建房子的图纸和房子: 创建类--new对象--用对象: 一.对象的两个特性: --对象的行为(功能):可以对对象施加操作,例如,电视机的开.关.转换频道: - ...

  2. java类和对象之间的差

    java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...

  3. C#用反射实现两个类的对象之间相同属性的值的复制

    在进行实体转换操作的时候如果需要在对两个实体之间两个属性字段差不多相同的类要进行一个互相的转换,我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要 ...

  4. Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系

    Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...

  5. python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系

    https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...

  6. 2.java面向对象类与类/类与对象之间关系详解

    继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...

  7. XML字符串和JAVA对象之间的转化

     1.JAXB中相关的注解.类和接口说明 JAXB 中主要的一些注解 - shenyunsese 的专栏 - CSDN 博客 注:教程很全面很详细.但是仅供参考. 主要疑问区分和说明:  1.1 @X ...

  8. [转]C#利用反射实现两个类的对象之间相同属性的值的复制

    本文转自:https://blog.csdn.net/u013093547/article/details/53584591 在使用c#进行程序编写时,会遇到一个问题,两个属性字段差不多相同的类要进行 ...

  9. jQuery的文件引入、入口函数以及js对象和jquery对象之间的互相转换

    JavaScript与jquery的区别 JavaScript是一门编程语言,用来编写客户端浏览器脚本. jQuery是javascript的一个库,包含多个可重用的函数,用来辅助简化javascri ...

随机推荐

  1. javascript的执行过程, 语法错误和运行时错误?

    js的执行错误分为 语法syntaxError,和 runtime error, 首先, js引擎会检查 整个脚本的语法, 如果在检查语法的过程中,发现了错误, 比如括哈不配对, 字符串少了 另一半的 ...

  2. newcoder F石头剪刀布(DFS + 思维)题解

    题意:wzms 今年举办了一场剪刀石头布大赛,bleaves 被选为负责人. 比赛共有 2n 个人参加, 分为 n 轮, 在每轮中,第 1 位选手和第 2 位选手对战,胜者作为新的第 1 位选手, 第 ...

  3. 160CrackMe练手 001

    peid判断无壳,打开输入伪码注册,根据报错od查找字符串 接下来定位到字符串周边代码 0042FA15 |. 8D55 F0 lea edx,[local.4] 0042FA18 |. 8B83 D ...

  4. 论文笔记: Dual Deep Network for Visual Tracking

    论文笔记: Dual Deep Network for Visual Tracking  2017-10-17 21:57:08  先来看文章的流程吧 ... 可以看到,作者所总结的三个点在于: 1. ...

  5. 关于 Image Caption 中测试时用到的 beam search算法

    关于beam search 之前组会中没讲清楚的 beam search,这里给一个案例来说明这种搜索算法. 在 Image Caption的测试阶段,为了得到输出的语句,一般会选用两种搜索方式,一种 ...

  6. java web项目在linux部署、启动,查看系统配置常用的linux命令总结

    本文为博主原创,未经允许不得转载: 以下为在工作中常用的linux命令进行了总结,主要在项目安装及启动,及编辑部署文件时应用较多1.gz文件是一种压缩文件. 以·tar.gz为扩展名的是一种压缩文件, ...

  7. 在mybatis中resultMap与resultType的区别

    MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMapresultType是直接表示返回类型的,而resultMap则是对外部ResultMa ...

  8. sublime插件开发手记

    原:http://blog.hickwu.com/sublime插件开发手记   标题: sublime插件开发手记 时间: 2014-01-05 14:58:02 正文: 插件基本结构 基本插件实现 ...

  9. jQuery中的$(window).load()与$(document).ready()以及jquery $(document).ready() 与window.onload的区别

    大多数jQuery实例或教程都告诉我们绑定我们的jQuery代码到$(document).ready事件.虽然$(document).ready 事件在大多数情况下都OK,但是它的解析顺序是在文档准备 ...

  10. python循环语句与其他编程语言不同之处

    1.局部变量 for i in range(5): print i, print i, 运行结果: 0 1 2 3 4 4 i是for语句里面的局部变量.但在python里面,在同一方法体内,定义了一 ...