xsd与xml和类(class)对象之间的互相转换
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)对象之间的互相转换的更多相关文章
- PHP类和对象之间的关系
		
类是对象的描述: 类和对象之间的关系类似于建房子的图纸和房子: 创建类--new对象--用对象: 一.对象的两个特性: --对象的行为(功能):可以对对象施加操作,例如,电视机的开.关.转换频道: - ...
 - java类和对象之间的差
		
java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...
 - C#用反射实现两个类的对象之间相同属性的值的复制
		
在进行实体转换操作的时候如果需要在对两个实体之间两个属性字段差不多相同的类要进行一个互相的转换,我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要 ...
 - Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
		
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
 - python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系
		
https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...
 - 2.java面向对象类与类/类与对象之间关系详解
		
继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...
 - XML字符串和JAVA对象之间的转化
		
1.JAXB中相关的注解.类和接口说明 JAXB 中主要的一些注解 - shenyunsese 的专栏 - CSDN 博客 注:教程很全面很详细.但是仅供参考. 主要疑问区分和说明: 1.1 @X ...
 - [转]C#利用反射实现两个类的对象之间相同属性的值的复制
		
本文转自:https://blog.csdn.net/u013093547/article/details/53584591 在使用c#进行程序编写时,会遇到一个问题,两个属性字段差不多相同的类要进行 ...
 - jQuery的文件引入、入口函数以及js对象和jquery对象之间的互相转换
		
JavaScript与jquery的区别 JavaScript是一门编程语言,用来编写客户端浏览器脚本. jQuery是javascript的一个库,包含多个可重用的函数,用来辅助简化javascri ...
 
随机推荐
- Django 中如何让外部访问本地的静态资源
			
简单使用 在Django中打开一个入口,让别人可以访问media文件 在settings中配置 MEDIA_ROOT=os.path.join(BASE_DIR,'media') 在路由中配置 fro ...
 - k倍区间 前缀和【蓝桥杯2017 C/C++ B组】
			
标题: k倍区间 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍 ...
 - YII框架的使用
			
YII框架的使用 spit: 吐痰,吐口水, 过去式: spat spat: 本身也可以作为一个单词, 意思是: "小打小闹""小的吵闹""小争吵&q ...
 - [转] Java中的final、static、this、super
			
final 关键字 final关键字主要用在三个地方:变量.方法.类. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改:如果是引用类型的变量,则在对其初始化之后便 ...
 - hihoCoder week17 最近公共祖先·三 lca st表
			
记录dfs序列,dfn[tot] 记录第tot次访问的节点 然后查两点在dfs序中出现的第一次 id[u] id[v] 然后 找 dep[k] = min( dep[i] ) {i 属于 [id[u ...
 - reshape2
			
require(reshape2)x = data.frame(subject = c("John", "Mary"), tim ...
 - 使用BeautifulSoup 爬取一个页面上的所有的超链接
			
# !/usr/bin/python # -*-coding:utf-8-*- import urllib from bs4 import BeautifulSoup response = urlli ...
 - Netty 核心组件笔记
			
Netty是一款高效的NIO框架和工具,基于JAVA NIO提供的API实现. 在JAVA NIO方面Selector给Reactor模式提供了基础,Netty结合Selector和Reactor模式 ...
 - CAS 单点登录  移动端获取TGT、ST 已经移动端登录页面不进行跳转的设置
			
一.设置移动客户端验证ST通过后,页面不进行302重定向跳转 修改web.xml <!--**************************************************** ...
 - Win10远程桌面可能是由于CredSSP加密Oracle修正
			
win10更新1083之后,远程桌面就会连接失败,显示如下: 根据微软官方的说法是更改了安全策略: https://support.microsoft.com/zh-cn/help/4093492/c ...