文章目录

  • 引言
  • 什么是MonoXSD/xsd.exe
  • 如何使用
  • xsd.exe的参数解析

引言

之前写了这两篇,对OpenDRIVE文件的读写有了一点认识。

  • 【C#】读写XML文件总结
  • OpenDRIVE——如何高效查阅元素和属性

但我也会思考一个问题,如何检测我读入的文件是否符合OpenDRIVE的规范呢?

这天,我看到了LGSVL Simulator的源码,它可以实现OpenDRIVE1.4地图的读写。我好奇地看了看它是如何读写OpenDIRVE的:使用的果然是Deserialize函数和Serialize函数(可查看【C#】读写XML文件总结)!

但是它的OpenDRIVE类比我之前看到的要复杂很多,最上方的注释,解释了这个玄机:

//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
//
//This source code was auto-generated by MonoXSD
//

原来OpenDRIVE的类可以由xsd文件自动生成!这样就不用自己费尽心思去考虑类中到底要添加哪些元素和属性了~ 此外,还可以检测到读取的文件是否符合xchema规范、确保写到硬盘中的文件也符合规范,正确性的问题也解决了!

目前OpenDRIVE的官网给出了1.6,1.5,1.4的规范说明,而1.6和1.4并不兼容,所以我们的OpenDRIVE读写器必须同时兼容以上3个版本,这样的话我们就需要分别根据它们的xsd文件生成对应的类了~

什么是MonoXSD/xsd.exe

微软的.NET官方文档中介绍了XML架构定义工具(Xsd.exe)。它可以从XDR,XML和XSD文件或运行时程序集中的类生成XML架构或公共语言运行时的类。

XML架构定义工具(Xsd.exe)通常可以在以下路径中找到:

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ {version} \ bin \ NETFX {version} Tools \

如何使用

微软的官方文档 How to: Use the XML Schema Definition Tool to Generate Classes and XML Schema Documents 中介绍了给工具的用法。

我举个例子:把OpenDRIVE V1.6的xsd文件转成对应的类:

  1. 导航到需要转换的xsd文件所在的目录

    在地址栏中输入cmd,在此位置打开一个命令行工具

  2. C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ {version} \ bin \ NETFX {version} Tools \目录下找到xsd.exe,并拷贝到xsd文件所在目录。

  3. 输入以下命令,即可生成.cs文件:

    xsd /classes /language:CS opendrive_16_core.xsd
    


    为什么只需要转换core.xsd,不需要管其他文件呢?因为core.xsd中已经Include了其他文件。

    我也检查过导出的.cs文件,已经包含了道路、交叉口等的元素。

xsd.exe的参数解析

输入以下命令,即可查看到帮助。也可以在官网XML架构定义工具(Xsd.exe) 中看到具体的参数解释。

xsd /?

帮助内容如下:

xsd.exe -Utility to generate schema or class files from given source.//【1】xsd.exe可以处理4种文件类型
//.xsd文件
//写完文件名后,必须写 /classes或/dataset
//可以写/e:等参数,也可以不写
xsd.exe <schema>.xsd /classes|dataset [/e:] [/l:] [/n:] [/o:] [/s] [/uri:]
//.dll或.exe文件
xsd.exe <assembly>.dll|.exe [/outputdir:] [/type: [...]]
//.xml文件
xsd.exe <instance>.xml [/outputdir:]
//.xdr文件
xsd.exe <schema>.xdr [/outputdir:]- OPTIONS -
//写/classes的意思是,为xsd文件生成类。可以简写为 /c
/classesGenerate classes for this schema. Short form is '/c'./datasetGenerate sub-classed DataSet for this schema. Short form is '/d'./enableLinqDataSetGenerate LINQ-enabled sub-classed Dataset for the schemas provided.  Short form is '/eld'./element:<element>Element from schema to process. Short form is '/e:'./fieldsGenerate fields instead of properties. Short form is '/f'./orderGenerate explicit order identifiers on all particle members./enableDataBindingImplement INotifyPropertyChanged interface on all generated typesto enable data binding. Short form is '/edb'.//写/language可以指定生成代码的语言,默认是CS。可以简写为/l:,冒号后面的值可以写CS、VB等。
/language:<language>The language to use for the generated code. Choose from 'CS', 'VB', 'JS','VJS', 'CPP' or provide a fully-qualified name for a class implementingSystem.CodeDom.Compiler.CodeDomProvider. The default languageis 'CS' (CSharp). Short form is '/l:'./namespace:<namespace>The namespace for generated class files. The default namespaceis the global namespace. Short form is '/n:'./nologoSuppresses the banner./out:<directoryName>The output directory to create files in. The defaultis the current directory. Short form is '/o:'./type:<type>Type from assembly to generate schema for. Multiple types may be provided.If no types are provided, then schemas for all types in an assemblyare generated. Short form is '/t:'./uri:<uri>Uri of elements from schema to process. Short form is '/u:'.- ADVANCED -/parameters:<file>Read command-line options from the specified xml file. Short form is '/p:'.- ARGUMENTS -
<schema>.xsd       Name of a schema containing elements to import.
<assembly>.dll|exe Name of an assembly containing types to generate schema for.
<instance>.xml     Name of an xml file to infer xsd schema from.
<schema>.xdr       Name of an xdr schema to convert to xsd.
Multiple file arguments of the same type may be provided.

如何使用MonoXSD / xsd.exe使用xsd文件生成C#类?相关推荐

  1. 使用ILmerge合并Exe、Dll文件的帮助类

    http://blog.csdn.net/pukuimin1226/article/details/7841741 using System; using System.Collections.Gen ...

  2. 如何引用XML文件生成C#类

    目录 XSD File Generate Class File Simply. 1 Why use XSD file to create C# classes?... 2 How to convert ...

  3. xml文件的书写及读取books.xml文件生成Book类

    books.xml文件的书写: <?xml version="1.0" encoding="UTF-8" ?> <!-- <?xml v ...

  4. 10. 利用vs2017中的lib.exe把def文件生成lib文件

    1.首先找到你的vs文件所在文件夹 2.然后找到找到lib.exe所在的位置 我的位置是在 D:\Program Files (x86)\Microsoft Visual Studio\2017\Co ...

  5. 使用hex6x.exe将out文件生成hex文件方法

    首先你要有*.cmd文件和hex6x.exe和*.out文件. 其中out文件是上面一篇中提到的,在CCS里面编译成功的输出文件*.out. *.cmd文件,里面的内容是这样的: debug\SEED ...

  6. dtd文件生成java类

    最近需要用dtd文件生成对应的Java类,其中xsd生成Java类之前已经说过了 其中 C:\Users\Administrator>xjc  -dtd  D:\eclipse_wks\IDS_ ...

  7. pb文件生成java类,根据proto文件生成pb和pb_service文件

    假如有一个HelloWorld.proto文件,内容如下: syntax = "proto3"; option java_package = "ex.grpc" ...

  8. Avro根据avsc文件生成java类

    背景 Avro可以提供跨语言的数据交互,下面记录如何通过Avro生成java类 步骤 1.定义avsc文件,里面包含类的一些信息,比如包名.类名.属性列表等,示例如下 {"namespace ...

  9. .xsd转Java Bean及生成的.java文件编码格式调整

    一..xsd格式文件简介 参考链接 二.使用sxd文件生成Java类 此步操作通过Windows系统cmd操作即可完成: // 使用win操作系统,来到xsd文件所在目录,启动cmd xjc TrnM ...

最新文章

  1. 对于高并发短连接造成Cannot assign requested address解决方法
  2. python怎么安装matplotlib-在python3.7下怎么安装matplotlib
  3. unix环境高级编程——文件i/o
  4. [Qt教程] 第31篇 网络(一)Qt网络编程简介
  5. 02.pipeline常用processor
  6. 得到频域波形的坐标数组_10. 频域法之序
  7. c/c++ 字符串分割
  8. PictureBox
  9. php生成图片水印,PHP生成图片加文字及图案水印办法
  10. cv图像翻转_涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南
  11. STM32H743+CubeMX-定时器TIM输出PWM(Output Compare模式)
  12. iterator remove_Iterator与fast-fail机制
  13. 收款码合并有什么弊端_为什么明明有个人收款码了,还要申请微信收款商业版?...
  14. EPPlus 读写 Excel 资料收集
  15. 华三 h3c ppp配置
  16. Ubuntu安装显卡驱动详细步骤
  17. 解析北斗部标协议_部标一体机北斗模块预测试
  18. 以太网没有有效IP配置问题
  19. 使用Windows XP 的放大镜、屏幕和键盘(转)
  20. 坐标变换中等幅值变换和等功率变换

热门文章

  1. 内联元素设置padding和margin
  2. 朴素贝叶斯Naive Bayesian分类器 (NBC)
  3. 您的连接不是私密连接 怎么解决
  4. python趣图_Python爬虫抓取暴走漫画上GIF趣图的代码
  5. QQ语音和视频怎么在电脑上录制音频?
  6. 新角度解读C++内联函数的前世今生(下)(详细必看)
  7. oracle 修改fstab,/etc/fstab 参数详解及如何设置开机自动挂载
  8. ansible-galaxy 介绍
  9. linux内核之读写锁rwlock_t使用入门
  10. 软件测试面试题:一美元纸币