XSD与XML文件的互相转换

(一)XSD转换为XML

首先在开始菜单中找到:Visual Studio 2005 命令提示

进入文件所在目录,如:-> D:

操作示例
下面的命令从 myFile.xdr 生成一个 XML 架构并将它保存到当前目录中。

xsd   myFile.xdr
下面的命令从 myFile.xml 生成一个 XML 架构并将它保存到指定目录中。

xsd myFile.xml   /outputdir:myOutputDir
下面的命令生成一个与 C# 语言中的指定架构相对应的 DataSet,并在当前目录中将其保存为 XSDSchemaFile.cs。

xsd /dataset /language:C# XSDSchemaFile.xsd
下面的命令为程序集 myAssembly.dll 中的所有类型生成 XML 架构,并在当前目录中将它们保存为 schema0.xsd。

xsd   myAssembly.dll  

 

 

其它:------------------------------------------------------------------------------------------------------------------

XML 架构定义工具从 XDR、XML 和 XSD 文件或者从运行库程序集中的类生成 XML 架构或公共语言运行库类。

xsd file.xdr [/outputdir:directory]
xsd file.xml [/outputdir:directory]
xsd file.xsd {/classes | /dataset} [/element:element]
[/language:language] [/namespace:namespace]
[/outputdir:directory] [URI:uri]
xsd {file.dll | file.exe} [/outputdir:directory] [/type:typename [...]]
参数 说明
file.extension 要转换的输入文件。必须将 extension 指定为下列之一:.xdr、.xml、.xsd、.dll 或者 .exe。
如果指定一个 XDR 架构文件(.xdr 扩展名),则 Xsd.exe 将 XDR 架构转换为 XSD 架构。输出文件与 XDR 架构同名,但扩展名为 .xsd。

如果指定一个 XML 文件(.xml 扩展名),则 Xsd.exe 从文件中的数据推导出架构并产生一个 XSD 架构。输出文件与 XML 文件同名,但扩展名为 .xsd。

如果指定一个 XML 架构文件(.xsd 扩展名),则 Xsd.exe 将为对应于 XML 架构的运行库对象生成源代码。

如果指定一个运行库程序集文件(.exe 或 .dll 扩展名),则 Xsd.exe 为该程序集中的一个或多个类型生成架构。可以使用 /type 选项来指定为其生成架构的类型。输出架构被命名为 schema0.xsd、schema1.xsd,依此类推。Xsd.exe 只有在给定类型使用 XMLRoot 自定义属性指定命名空间时才产生多架构。


常规选项
选项 说明
/h[elp] 显示此工具的命令语法和选项。
/o[utputdir]:directory 指定输出文件的目录。此参数只能出现一次。默认为当前目录。
/? 显示此工具的命令语法和选项。

XSD 文件选项
必须为 xsd 文件仅指定下列选项中的一个。

选项 说明
/c[lasses] 生成与指定架构相对应的类。若要将 XML 数据读入对象,请使用 System.XML.Serialization.XMLSerializer.Deserializer 方法。
/d[ataset] 生成一个从 DataSet 派生的类,该类与指定的架构相对应。若要将 XML 数据读入派生类,请使用 System.Data.DataSet.ReadXml 方法。

还可以为 .xsd 文件指定下列任何选项。

选项 说明
/e[lement]:element 指定架构中要为其生成代码的元素。默认情况下,键入所有元素。可以多次指定该参数。
/l[anguage]:language 指定要使用的编程语言。从 CS(默认)、VB 或者 JS 中选择。还可以为实现 System.CodeDom.Compiler.CodeDomProvider 的类指定完全限定名。
/n[amespace]:namespace 为生成的类型指定运行库命名空间。默认命名空间为 Schemas。
/u[ri]:uri 为架构中要为其生成代码的元素指定 URI。该 URI(如果存在)应用于使用 /element 选项指定的所有元素。

DLL 和 EXE 文件选项
选项 说明
/t[ype]:typename 指定要为其创建架构的类型的名称。可以指定多个类型参数。如果 typename 不指定一个命名空间,则 Xsd.exe 将程序集中的所有类型与指定类型相匹配。如果 typename 指定一个命名空间,则仅匹配那个类型。如果 typename 以星号字符 (*) 结尾,则此工具匹配所有以 * 前的字符串开头的类型。如果省略 /type 选项,则 Xsd.exe 为程序集中的所有类型生成架构。

备注
Xsd.exe 执行下列操作:

XDR 到 XSD
使用精简 XML 数据架构文件生成 XML 架构。XDR 为早期基于 XML 的架构格式。
XML 到 XSD
使用 XML 文件生成 XML 架构。
XSD 到 DataSet
使用 XSD 架构文件生成公共语言运行库 DataSet 类。生成的类为规则 XML 数据提供复杂对象模型。
XSD 到类
使用 XSD 架构文件生成运行库类。生成的类可以和 System.XML.Serialization.XMLSerializer 一起使用以读取和编写遵循架构的 XML 代码。
类到 XSD
使用运行库程序集文件中的一个或多个类型生成 XML 架构。生成的架构定义由 System.XML.Serialization.XMLSerializer 使用的 XML 格式。
Xsd.exe 只允许操作遵循由 WWW 联合会 (W3C) 提议的 XML 架构定义 (XSD) 语言的 XML 架构。有关 XML 架构定义提议或 XML 标准的更多信息,请参阅 http://w3c.org。 

 

(二)XSD转换为XML

项目中有时候要用XML作为数据源,因此需要定义XML文件和相应的类,最佳方法是首先定义XSD,然后自动生成实体类,最后生成XML和填充数据;读取XML数据源的时候,首先用XSD验证XML数据格式,然后自动读入实体类使用。

定义XSD的过程就是类似设计表结构的过程,二者也可以相互转化。

本文讨论了如何定义XSD文件(XML Schema),然后自动生成实体类,最后生成XML的过程,以及如何根据XSD验证XML文件的合法性。以供大家做项目时参考。

1. 首先在VS2005中添加一个XSD文件。例子XSD可以参考:
http://www.15seconds.com/issue/031209.htm
http://www.cduce.org/manual_schema_samples.html
 
2. 使用VS2005工具XSD.exe(SDK/v2.0/Bin/xsd.exe)自动生成实体类:
xsd /c /namespace:myCompany /language:CS temp1.xsd
也可以生成DataSet类型的类:
xsd /dataset /language:CS temp1.xsd
 
    自动读取XML数据到实体类:
    
XmlSerializer xs = new XmlSerializer(typeof(myClassType));
using (FileStream fs = new FileStream(XmlFilePath, FileMode.Open))
{
    return (myClassType)xs.Deserialize(fs);
}
     

3. 如何由XSD生成XML?

   - 可以用其他工具,如XMLSpy,DTD/Schema -> Generate sample XML file...
 
   - 可以由XSD生成类,然后写代码实例化这个类,最后序列化为XML

   - 如何自动给类每个属性设置一个空值:(用反射的方法)

     代码示例:


/** <summary>
        /// Get all properties and set default value
        /// </summary>
        /// <typeparam name="T">Type</typeparam>
        /// <param name="item">Object</param>
        private static void ReflctProperties<T>(T item)
        {
            PropertyInfo[] pty = typeof(T).GetProperties();
            Type t = item.GetType();

            if (pty != null)
            {
                foreach (PropertyInfo info in pty)
                {
                    if (!info.CanWrite) continue;

                    if (info.PropertyType == typeof(String))
                    {
                        t.GetProperty(info.Name).SetValue(item, String.Empty, null);
                    }
                    if (info.PropertyType == typeof(Boolean))
                    {
                        t.GetProperty(info.Name).SetValue(item, true, null);
                    }
                }
            }
        }
    - 反射读取类的属性:
 
public static object GetProperty<T>(T item, string PropertyName)
{
     PropertyInfo propertyInfo = item.GetType().GetProperty(PropertyName);
     if (propertyInfo != null)
     {               
         return propertyInfo.GetValue(item, null);
     }
     return null;
}


   - 如何序列化为XML?
/** <summary>
        /// Serialize class instance to XML file
        /// </summary>
        /// <typeparam name="T">type</typeparam>
        /// <param name="XMLFileToCreate">XMLFileToCreate</param>
        /// <param name="instance">class instance</param>
        public void Serialize<T>(string XMLFileToCreate, T instance)
        {
            if (instance == null) return;

            XmlSerializer xs = new XmlSerializer(typeof(T));
            using (StreamWriter sw = new StreamWriter(XMLFileToCreate))
            {
                xs.Serialize(sw, instance);
            }
        }
 
4. 如何使用XSD来验证XML文件合法性:
  
   - 使用XMLSpy,首先Assign XSD,然后验证 (其实就是设置XML里面引用的schema,注意schema可能引用其他的schema)
 
   - 代码中验证:

    Validate XML against XSD

欢迎转载

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值