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 ...
随机推荐
- batchGetAnchorLevel(dubbo接口)
一.编写脚本前的准备工作 1.安装idea,安装本地maven库,并在idea里面配置maven 2.导入git源码(目的在于下载所依赖的基础包)-->File-new-Project from ...
- Provinces of China
https://en.wikipedia.org/wiki/Provinces_of_China#Province
- Android中activity的四个启动模式
activity的四个启动方式分别是standard.singletop.singletask.singleinstance.第一个其实就是只要新打开活动就会新建一个实例.第二个顾名思义返回栈的顶部只 ...
- topcoder srm 425 div1
problem1 link 暴力搜索即可. problem2 link 可以将每次所有的piece的位置看作一个状态,由于$C_{25}^{5}=53130$,所以最多有这么多状态.这里可以加一些优化 ...
- ZOJ 3829 Known Notation(贪心)题解
题意:给一串字符,问你最少几步能变成后缀表达式.后缀表达式定义为,1 * 1 = 1 1 *,题目所给出的字串不带空格.你可以进行两种操作:加数字,交换任意两个字符. 思路:(不)显然,最终结果数字比 ...
- SCU 4438 Censor(Hash)题解
题意:找出字符串p中的w串删除,反复操作,直到找不到w,输出这个串 思路:哈希处理前缀和,如果值相同就删掉. 代码: #include<iostream> #include<algo ...
- $on在构造器外部添加事件(通过$emit进行外部调用)$once执行一次的事件(通过$emit进行外部调用)$off关闭事件
$on 在构造器外部添加事件. $on接收两个参数,第一个参数是调用时的事件名称,第二个参数是一个匿名方法. 如果按钮在作用域外部,可以利用$emit来执行. html <div id=&quo ...
- JavaScript 调试常见报错以及原因
JavaScript 调试常见报错以及原因 测试环境 chrome 版本 66.0.3359.170(正式版本) (64 位) TypeError 类型错误 不是操作符所接受的数据类型. //---- ...
- 前端如何应对笔试算法题?(用node编程)
用nodeJs写算法题 咱们前端使用算法的地方不多,但是为了校招笔试,不得不针对算法题去练习呀! 好不容易下定决心 攻克算法题.发现js并不能像c语言一样自建输入输出流.只能回去学习c语言了吗?其实不 ...
- 理解 Redis(2) - 手把手教你理清 Redis 安装全过程
Redis 官网 https://redis.io/ 之前学习 Redis 学了好多次, 下载安装也都按照教程或官网文档弄过, 但是对于安装过程一直有点迷糊, 感觉稀里糊涂地就好了, 就可以用了. 这 ...