很早以前看过一句话:“XML就象空气”,在企业应用开发中XML是一个重要的数据交换标准。而XSD则可以用来校验XML的数据格式是否正确。

一个典型的XSD文件如下:

1 <?xml version="1.0" encoding="UTF-8"?>

2

3

4

5

6 运单

7

8

9

10

11

12

13

14

15 运单前缀只有输入3位数字

16

17

18

19

20

21

22

23

24

25 运单号只能输入8位数字

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41 物流参与者至少要有2个

42

43

44

45

46

47 物流参考者类型,只能是A/S/C其中之一

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

View Code

看到这一大段xml,第一反应通常是头晕,幸好这些内容不用纯手动编写,已经有很多现成的工具,比如XmlSpy可以方便的以GUI方式,通过轻点鼠标,拖拖拉拉就能完成XSD的开发。

这是XmlSpy中XSD的可视化设计界面,还能切换不同的视图,比如下面这样:

对于首次接触XmlSpy的朋友,强烈推荐看下安装目录下的Tutorial.pdf,这是一个不错的入门教程,30分钟以前绝对可以快速浏览一遍。

C#中可以方便的使用XSD来验证xml文件的正确性,示例代码如下:

1 usingSystem;2 usingSystem.Xml;3

4 namespaceXsdValidate5 {6 classProgram7 {8 static void Main(string[] args)9 {10 string xmlFile = @"C:\Users\jimmy.yang\Desktop\XMLSPY\TEST\sample.xml";11 string xsdFile = @"C:\Users\jimmy.yang\Desktop\XMLSPY\TEST\sample.xsd";12

13 var xsdValidateResult =ValidateXml(xmlFile, xsdFile);14

15 if(xsdValidateResult.Item1)16 {17 Console.WriteLine("校验通过!");18 }19 else

20 {21 Console.WriteLine("校验失败,原因:\n" +xsdValidateResult.Item2);22 }23 Console.Read();24

25 }26

27 ///

28 ///使用xsd验证xml是否正确29 ///

30 /// xml文件路径

31 /// xsd文件路径

32 ///

33 static Tuple ValidateXml(string xmlFilePath, stringxsdFilePath)34 {35 Tuple result = new Tuple(true, "");36 XmlReaderSettings st = newXmlReaderSettings();37 st.ValidationType =ValidationType.Schema;38 st.Schemas.Add(null, xsdFilePath);39

40 //设置验证xml出错时的事件。

41 st.ValidationEventHandler += (obj, e) =>

42 {43 result = new Tuple(false, e.Message);44 };45

46 XmlReader xr =XmlReader.Create(xmlFilePath, st);47 while(xr.Read())48 {49 if(xr.IsStartElement())50 {51 xr.Read();52 }53 }54 xr.Close();55 returnresult;56 }57 }58 }

View Code

注意:如果节点采用pattern,即正则表达式验证,比如

XMLSpy中,该节点必须填写"^12345678$"才能验证通过,而如果用.NET/JAVA写代码验证的话,^、$能自动识别为"匹配字符开头/结尾"

XSD还能方便的生成c#类,有二种方法:

1、XMLSpy里先打开一个XSD文件,然后 DTD/Schema->Generate Program Code,接下来按提示操作即可

注:XMLSpy生成的c#类太过于复杂,我个人觉得有点啰嗦

2、直接使用vs.net自带的xsd命令

vs.net命令行下,输入

xsd "xsd文件所在的路径" /classes /out:"cs文件的输出目录"

即可生成对应的cs类 ,文中最开头的xsd生成的cs类代码如下:

1 //------------------------------------------------------------------------------2 //3 //This code was generated by a tool.4 //Runtime Version:4.0.30319.183315 //

6 //Changes to this file may cause incorrect behavior and will be lost if7 //the code is regenerated.8 //9 //------------------------------------------------------------------------------

10

11 usingSystem.Xml.Serialization;12

13 //

14 //This source code was auto-generated by xsd, Version=4.0.30319.1.15 //

16

17

18 ///

19 [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]20 [System.SerializableAttribute()]21 [System.Diagnostics.DebuggerStepThroughAttribute()]22 [System.ComponentModel.DesignerCategoryAttribute("code")]23 [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]24 [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]25 public partial classAWB {26

27 privateAWBAWBINFO aWBINFOField;28

29 privateAWBPARTICIPANT[] pARTINFOField;30

31 ///

32 [System.Xml.Serialization.XmlElementAttribute("AWB-INFO")]33 publicAWBAWBINFO AWBINFO {34 get{35 return this.aWBINFOField;36 }37 set{38 this.aWBINFOField =value;39 }40 }41

42 ///

43 [System.Xml.Serialization.XmlArrayAttribute("PART-INFO")]44 [System.Xml.Serialization.XmlArrayItemAttribute("PARTICIPANT", IsNullable=false)]45 publicAWBPARTICIPANT[] PARTINFO {46 get{47 return this.pARTINFOField;48 }49 set{50 this.pARTINFOField =value;51 }52 }53 }54

55 ///

56 [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]57 [System.SerializableAttribute()]58 [System.Diagnostics.DebuggerStepThroughAttribute()]59 [System.ComponentModel.DesignerCategoryAttribute("code")]60 [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]61 public partial classAWBAWBINFO {62

63 private stringaWBPREField;64

65 private stringaWBNOField;66

67 ///

68 [System.Xml.Serialization.XmlElementAttribute(DataType="positiveInteger")]69 public stringAWBPRE {70 get{71 return this.aWBPREField;72 }73 set{74 this.aWBPREField =value;75 }76 }77

78 ///

79 [System.Xml.Serialization.XmlElementAttribute(DataType="positiveInteger")]80 public stringAWBNO {81 get{82 return this.aWBNOField;83 }84 set{85 this.aWBNOField =value;86 }87 }88 }89

90 ///

91 [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]92 [System.SerializableAttribute()]93 [System.Diagnostics.DebuggerStepThroughAttribute()]94 [System.ComponentModel.DesignerCategoryAttribute("code")]95 public partial classAddressType {96

97 private stringnameField;98

99 private stringstreetField;100

101 private stringcityField;102

103 ///

104 public stringName {105 get{106 return this.nameField;107 }108 set{109 this.nameField =value;110 }111 }112

113 ///

114 public stringStreet {115 get{116 return this.streetField;117 }118 set{119 this.streetField =value;120 }121 }122

123 ///

124 public stringCity {125 get{126 return this.cityField;127 }128 set{129 this.cityField =value;130 }131 }132 }133

134 ///

135 [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]136 [System.SerializableAttribute()]137 [System.Diagnostics.DebuggerStepThroughAttribute()]138 [System.ComponentModel.DesignerCategoryAttribute("code")]139 [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]140 public partial classAWBPARTICIPANT {141

142 privateAWBPARTICIPANTTYPE tYPEField;143

144 privateAddressType aDDRESSField;145

146 ///

147 publicAWBPARTICIPANTTYPE TYPE {148 get{149 return this.tYPEField;150 }151 set{152 this.tYPEField =value;153 }154 }155

156 ///

157 publicAddressType ADDRESS {158 get{159 return this.aDDRESSField;160 }161 set{162 this.aDDRESSField =value;163 }164 }165 }166

167 ///

168 [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]169 [System.SerializableAttribute()]170 [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]171 public enumAWBPARTICIPANTTYPE {172

173 ///

174 C,175

176 ///

177 S,178

179 ///

180 A,181 }

View Code

xsd命令还能直接根据xml生成xsd文件,使用方法如下:

xsd c:\sampe.xml /out:c:\

这样会根据sample.xml在c:\生成sample.xsd文件

xmlspy xsd生成java_XmlSpy / XSD 以及 验证相关推荐

  1. xmlspy xsd生成java_如何用xmlspy将xml文档生成xsd文件

    所以我们有必要知道如何通过xmlspy这个非常方便的工具进行xml的转换工作. 点击"File"-"New"系统会弹出"create new docu ...

  2. webservice xsd.exe根据xml生成xsd。然后根据xsd生成java bean

    2019独角兽企业重金招聘Python工程师标准>>> webservice xsd.exe根据xml生成xsd.然后根据xsd生成java bean 转载于:https://my. ...

  3. 根据 xsd 生成 jaxb java 类

    根据 xsd 生成 jaxb java 类 dos 窗口,执行命令: xjc -p com.shagri.veg.things.marshal.pesticide E:\vpst\xsd\pestic ...

  4. jaxb xsd生成xml_使用JAXB和Jackson从XSD生成JSON模式

    jaxb xsd生成xml 在本文中,我演示了一种从XML Schema (XSD)生成JSON Schema的 方法 . 在概述从XML Schema创建JSON Schema的方法的同时,本文还演 ...

  5. 使用JAXB和Jackson从XSD生成JSON模式

    在本文中,我演示了一种从XML Schema (XSD)生成JSON Schema的 方法 . 在概述从XML Schema创建JSON Schema的方法的同时,本文还演示了JAXB实现的用法(与J ...

  6. jaxb xsd生成xml_使用JAXB从XSD生成XML

    jaxb xsd生成xml 这是最初由JCG合作伙伴 Experiences Unlimited的Mohamed Sanaulla发表的帖子. Mohamed解释了如何使用JAXB从给定的XSD生成X ...

  7. 使用JAXB从XSD生成XML

    这是最初由JCG合作伙伴 Experiences Unlimited的Mohamed Sanaulla发表的帖子. Mohamed解释了如何使用JAXB从给定的XSD生成XML . (注意:对原始帖子 ...

  8. Castor xsd生成java_java – Castor可以处理从基础XSD导入的多个XSD生成类吗?

    注意:我是 EclipseLink JAXB (MOXy)领导者,也是 JAXB 2 (JSR-222)专家组的成员. Can Castor do this? If so, what would be ...

  9. 如何在Eclipse中从XSD生成XML

    If you work on web services, you must have been using XSD. To test the web service, you need to gene ...

  10. xsd 生成 java 类_如何从Java类生成XSD

    xsd 生成 java 类 In last few posts, we learned about Java JAXB and how to generate java class from XSD. ...

最新文章

  1. linux ramdisk与tmpfs的深入分析
  2. js实现横向跑马灯效果
  3. BZOJ 3731: Gty的超级妹子树
  4. c++回到起点旅行商问题_不要犯同样的错,提C型房车回渝上牌长途旅行的心路历程...
  5. [国嵌攻略][038][时钟初始化]
  6. MyCat分布式数据库集群架构工作笔记0020---高可用_单表存储千万级_海量存储_水平分表ER表
  7. Bailian2764 数根(POJ NOI0113-50)【数论】
  8. C语言教师信息管理系统实验报告书
  9. 女性黑客的崛起将造福世界
  10. 【整理】爬取网页数据的方法汇总
  11. 爬取Google网站的图片
  12. 微课--Python使用UDP协议实现局域网内屏幕广播(40分钟)
  13. 机器人莫麟_国内机器人/机甲动画汇总——2013年
  14. 【金融项目】尚融宝项目(十一)
  15. 电脑其实很好玩,玩好了其实很无耻(转自校内)
  16. 查看linux版本的几种方法
  17. 青藤 #10115 栈练习1
  18. 21个MySQL表设计的经验准则
  19. 考研政治:马克思主义基本原理
  20. 借助nz-pagination中的let-total解析ng-template

热门文章

  1. 大数据项目-4.下载安装谷歌翻译插件
  2. 开源ITIL框架 php,分享|如何在 CentOS 7 上安装开源 ITIL 门户 iTOP
  3. 财智理财7破解思路与总结
  4. linux 查看硬盘健康,linux硬盘检测健康状态
  5. FireBug使用方法
  6. MVP模式——Okhttp实现下载图片并带有进度 【Android Demo】
  7. 分享一下我制作的Bat批处理程序-PC Tools(含源码)
  8. 基于FFmpeg的视频播放器之九:使用SDL2播放音频
  9. 如何破解(免积分)下载百度文库+豆丁收费文档
  10. java redis令牌桶_Redis令牌桶算法在限速中的应用