zoukankan      html  css  js  c++  java
  • 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进行模仿)。

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

  • 相关阅读:
    JSON的一个例子(代码来源于网上)
    浅谈Event Flow、Process、Method及其Applications
    JS中object与constructor的分析
    浅谈for...in与for....of
    浅谈语言的过去与未来
    正则表达式的四个小应用
    初步了解DOM与BOM
    String Method的字符串变换的一个例子
    update 批量更新
    一个 Tomcat下两个项目。
  • 原文地址:https://www.cnblogs.com/qq260250932/p/5011966.html
Copyright © 2011-2022 走看看