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. android 6 中init.rc的生成过程【转】

    本文转载自:https://blog.csdn.net/quhj/article/details/51819638 android 系统开机是会有一个初始化过程 init ,整个初始化过程是根据配置脚 ...

  2. 配置named服务之前的 相关术语意思

    putty: [p^ti]: 油灰, 腻子,像 clay 粘土一样起 连接作用. 非常简洁,只有500多kB, 不需要安装,纯绿色的,版本还是0.x, Simon Tatham, 甚至没有主界面,没有 ...

  3. github帐户和仓库的创建

    sign up is registration and sign in is logging in for "in" is to enter an existing account ...

  4. 再谈fedora 23中的flash的安装

    安装下载, flash插件的地址是 https://get.adobe.com/flashplayer/ ls 的显示, 记住两个很常用的选项: 指定 "假设的屏幕的宽度" , - ...

  5. 深入浅出JavaScript(一)

    数据类型 1. 六种数据类型 JavaScript包含六种数据类型:基本类型number.string.boolean.null.undefined和对象类型Object.其中,对象类型包含方法fun ...

  6. 常用处理数组、字符串API → forEach every some sort map filter slice split indexOf concat substring substr splice join toString replace

    Object与Array的语法糖 var arr = [1,2,3]; // [] 是 new Array(1,2,3) 的语法糖(简写) var obj = {'name':2,'age':3}; ...

  7. .Net Core Package lose or not match

    错误.警告的说明: 示例一: 严重性:警告 代码:MSB3106 说明 :程序集强名称“C:\Users\$(computerName)\.nuget\packages\$(packageName)\ ...

  8. zepto 入门

    2017-03-17 文章来源:http://www.cnblogs.com/daysme zepto 简介 jq虽然有一些衍生的插件可用在移动端上,但它有点大. click 有,但有问题 onmou ...

  9. Markdown 指南

    Markdown 是一种轻量级的「标记语言」,使用用特殊的 Markdown 文档处理器将 Markdown 语法翻译成预设的文档格式.标题大小等,一般用于展示时输出的是 HTML.这个教程可以让使用 ...

  10. HDU 5727 Necklace(全排列+二分图匹配)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5727 题意:现在有n个阳珠子和n个阴珠子,现在要把它们串成项链,要求是阴阳珠子间隔串,但是有些阴阳珠 ...