第一:通过现有的已经写好的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进行模仿)。
这样就实现了这三者之间的转换了。