菜鸟也能煮酒论英雄
他山之石,可以攻玉。善于从他人处汲取营养的人,才能不断地取长补短,使自己走向成功


 

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

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

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

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

第二:利用上一步生成的类文件(.cs)来创建类的实例以及赋值,然后将这些数据创建和写入xml文件中。
将已经创建好的类的实例(XMLObject)和要创建的XML文件的路径,然后将参数赋给下面的CreateXMLFile方法。这样XML文件和数据就会被写入了。

    /// <summary>
        
/// Create and Write Xml Document
        
/// </summary>
        
/// <param name="XMLObject">XML Class Object</param>
        
/// <param name="XMLDocumentUrl">Create XML File Url</param>

        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文件中的数据了。

       

    
     /// <summary>
        
/// Read XML File 
        
/// </summary>
        
/// <param name="type">Class Type</param>
        
/// <param name="XMLDocumentUrl">XML File Url</param>
        
/// <returns>XML Object</returns>

        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 + "\nValidator XML File: " + xmldoxument + " \n");
                        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:\tValidator {0}\n", (Success == true ? "Success" : "Fiald"));
            }

            
catch (XmlException e)
            
{
                Console.WriteLine(
"Xml Exception:" + e.ToString() + "\n");
            }


            
catch (Exception e)
            
{
                Console.WriteLine(
"Exception:" + e.ToString() + "\n");
            }

        }


        
public void ValidationEventHandle(object sender, ValidationEventArgs args)
        
{
            Success 
= false;

            Console.WriteLine(
"\tValidator Error:" + args.Message + "\n");

            
if (args.Severity == XmlSeverityType.Warning)
            
{
                Console.WriteLine(
"Did not find it mandatory certification framework.\n");
            }

            
else
                
if (args.Severity == XmlSeverityType.Error)
                
{
                    Console.WriteLine(
"Examples of document verification, validation error occurred.\n");
                }


            
if (args.Exception != null)   //XSD Structure validation error  
            {
                Console.WriteLine(args.Exception.SourceUri 
+ "," + args.Exception.LinePosition + "," + args.Exception.LineNumber);
            }

        }

    }


 

 

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

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

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

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

 

示例下载
posted on 2007-09-08 09:06  江太公  阅读(2865)  评论(10编辑  收藏  举报