★★★★★ 请教一个XSD强类型的问题 【【100】】 ★★★★★
我要对XML文件进行验证,所以我写下了如下代码,根据数据库表结构来推断出了一个相对强类型的XML。
程序如下:
DataSet ds = ZTC.Engine.Testing.DataTableToXSDTest();
ds.WriteXml( "d:\\abc\\123.xml ");
ds.WriteXmlSchema( "d:\\abc\\123.xsd ");
形成的XSD文件如下:
...............................
<xs:element name= "tgyszl ">
<xs:complexType>
<xs:sequence>
<xs:element name= "Gys_id " type= "xs:int " minOccurs= "0 " />
<xs:element name= "cEnterpriseCode " type= "xs:string " minOccurs= "0 " />
<xs:element name= "ID " type= "xs:int " minOccurs= "0 " />
<xs:element name= "Gys_syrq " type= "xs:dateTime " minOccurs= "0 " />
<xs:element name= "Gys_mc " type= "xs:string " minOccurs= "0 " />
<xs:element name= "Gys_xkzhm " type= "xs:string " minOccurs= "0 " />
<xs:element name= "Gys_xkzxq " type= "xs:dateTime " minOccurs= "0 " />
<xs:element name= "Gys_yyzzhm " type= "xs:string " minOccurs= "0 " />
<xs:element name= "Gys_yyzzxq " type= "xs:dateTime " minOccurs= "0 " />
<xs:element name= "Gys_qylbjy " type= "xs:string " minOccurs= "0 " />
.......
</xs:sequence>
</xs:complexType>
</xs:element>
..................................................
形成的XSD文件,只有类型,没有长度限制。
有没有办法用程序直接生成更强类型的XSD定义啊?
比如:
<xs:element name= "au_id "> <xs:simpleType> <xs:restriction base= "xs:string "> <xs:minLength value= "1 " /> <xs:maxLength value= "5 " /> </xs:restriction>
</xs:simpleType>
</xs:element>
否则手动在配置的话,我几百个字段,配到下个星期一了。
------解决方案--------------------ds.WriteXmlSchema( "d:\\abc\\123.xsd ");
==>
ds.Tables[0].WriteXmlSchema( "d:\\abc\\123.xsd ",true);
如果不行的话,建议访问数据库系统表,得到各列的限制条件,再XPATH查找节点,添加子节点或加在属性里。DataSet没有参数来设定保存你要求的强类型
------解决方案--------------------关注,帮顶.........
------解决方案--------------------讨论一下啊:使用xsd方便么?表面是方便了,但是做一些别的文章,例如楼主控制字节长度有出现问题了!
使用xsd是不是破坏了三层架构?我们知道使用xsd把添加修改删除还是实体都放在一起了
------解决方案--------------------接个分 晚上看
------解决方案--------------------你还是自己写代码把表结构生成xml文件算了,相关代码
检索表结构的SQL语句
string TableName= "Table1 ";
string Sql = "select A.Column_ID,case A.is_identity when 1 then case C.Name when 'bigint ' then 'IdentityLong ' else 'Identity ' end else C.Name end as ColumnType, "
+ " isnull((select top 1 [value] from sys.extended_properties where A.object_ID=Major_ID and A.Column_ID=Minor_ID), ' ') as Memo, "