如何由XSD自动生成XML和实体类

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

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

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

1. 首先在 VS2005中添加一个XSD文件。例子XSD可以参考:
 
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, 
truenull);
                    }

                }

            }

        }
    - 反射读取类的属性:
 
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 == nullreturn;

            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
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值