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. CEF 添加F5刷新快捷键

    Keyboardcodes:https://www.androidos.net.cn/android/4.3_r1/xref/external/webkit/Source/WebCore/platfo ...

  2. topcoder srm 695 div1 -3

    1.称一个串的子串(连续一段)为$same$当且仅当这个子串所有字符都一样.子串不同当且仅当在原串中的起始位置不同.现在构造一个长度为$n$的只包含字符'a','b'的串$s$,使得$s$满足长度为$ ...

  3. Spring Cloud 入门指南

    Spring Cloud 方志朋-史上最简单的 Spring Cloud 教程

  4. Ubuntu package system is broken

    原文链接安装软件的时候出现错误,遇到包管理系统损坏的问题.在askubuntu上找到解决办法,这里进行记录总结:首先:sudo apt-get -f install 强制安装没有下载完成的文件.然后: ...

  5. Spring Boot以War包启动

    1.IDEA Spring Initializer自动构建的war包项目,自动生成的Initializer类,用于外部Tomcat容器启动该项目时调用,如果仍然使用主类main函数方式启动则与此类无关 ...

  6. html 之 浮动(待补充)

    通过设置float 样式属性来决定区块标签的浮动 问题:区块与非区块浮动的特点(左右) 区块与区块浮动的特点(左右) ie浏览器与谷歌等浏览器的效果差异

  7. template render in javascript

    art-template for github 中文官方文档

  8. docker 命令随笔

    如果是容器传输文件到本地的话,反过来就好了: docker cp  ID全称:容器文件路径   本地路径 2.进入docker 容器 docker exec -it fw-pay-trade-serv ...

  9. 【NOIP 2017】Day2 T3 列队

    Problem Description \(Sylvia\) 是一个热爱学习的女孩子. 前段时间,\(Sylvia\) 参加了学校的军训.众所周知,军训的时候需要站方阵. \(Sylvia\) 所在的 ...

  10. Jenkins参数化构建(二)之 Maven command line使用Jenkins参数

    安装Extened Choice Parameter插件 General模块选择‘参数化构建过程’   3. maven command line中使用 clean test -DsuiteXmlFi ...