xsd解析xml

news/2024/7/24 0:50:31 标签: java, c#

下面讲述根据xml生成对应序列化反序列化类的过程,xml需要首先转化为xsd,然后再生成为实体类。其中,XSD是XML Schema Definition的缩写。

1.拥有一个xml文件

2.打开vs的command line:

  

 xsd *.xml ,执行这个命令 是通过xml文件生成xsd文件,xsd文件将生成在当前命令目录下。

xsd *.xsd /classes 是通过xsd文件生成xml的解析类,cs文件。示例顺便指定了命名空间为Test

 这样就可以把cs文件放到项目中去使用了,这个cs文件就是xml对应的解析类。

 

PS :xsd自动解析的文件不知道每个节点是不是唯一的还是有多个。如果需要指定某节点是唯一的,可以在生成xsd文件之后,把xsd文件放到vs中,

使用xml(Text) editor 方式打开,然后指定maxOccurs="1",这样就指定了当前节点为唯一一个了。maxOccurs="unbounded",表明xml节点可以有很多个。 这样再把修改的xsd使用xsd *.xsd /classes 命令生成cs文件,或许更满足你的需求。

 

3. 解析 xml 

        static void Main(string[] args)
        {
            try
            {
                XmlSerializer ser = new XmlSerializer(typeof(Response));
                //读取xml进行解析
                FileStream fs = new FileStream(@"D:\a.xml", FileMode.Open);
                Response response = ser.Deserialize(fs) as Response;
                response.SIP.Line1.Port = "9999";
                fs.Close();
                //修改xml并保存
                fs = new FileStream(@"D:\a.xml", FileMode.Open, FileAccess.Write);
                ser.Serialize(fs, response);
                fs.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

  其中Response是我xml的首节点。

 

 

附加:

我的xml示例是:

<Response>
  <APIVersion>1.0</APIVersion>
  <Authenticated>true</Authenticated>
  <Global>
    <SoftwareUpgrade>
      <Enabled>false</Enabled>
      <Version/>
      <URL/>
      <Rule/>
      <RetryInterval>3600</RetryInterval>
    </SoftwareUpgrade>
    <Provisioning>
      <Enabled>true</Enabled>
      <URL>https://eeee.cn</URL>
      <Interval>86400</Interval>
    </Provisioning>
    <Phonebook>
      <Enabled>true</Enabled>
      <URL>https://ffff.com</URL>
    </Phonebook>
  </Global>
  <SIP>
    <Line1>
      <DisplayName>Terr</DisplayName>
      <URI>5538769</URI>
      <PreferredURI>for@abc.com</PreferredURI>
      <AuthName>5530769</AuthName>
      <Password>1sPU</Password>
      <Transport>TCP</Transport>
      <Mailbox>
        123
      </Mailbox>
      <Port>7899</Port>
      <Proxy>
        <AutoMode>off</AutoMode>
        <Proxy1>proxy</Proxy1>
        <Proxy2/>
      </Proxy>
    </Line1>
  </SIP>
</Response>

  

 

转载于:https://www.cnblogs.com/luohengstudy/p/3928945.html


http://www.niftyadmin.cn/n/691387.html

相关文章

LongPathException问题解析

一、背景 当windows系统下使用System.IO命名空间下的方法&#xff0c;目录长度超过260个字符时&#xff0c;.net framework会抛出LongPathException。查阅相关资料&#xff0c;发现是微软为了安全和系统兼容性做出的限制。 原话是这么说的&#xff1a;The exception …

Android使用7牛云存储

第一次使用这个云存储&#xff0c;话说7牛云存储大有来头&#xff01;区别于国内外其他云存储&#xff0c;七牛自行研发的全分布式架构解决了其他云存储单一数据中心架构可能存在的风险&#xff0c;同时首创双向加速特性对数据上传下载均加速&#xff0c;使得数据访问速度较传统…

你经历或者不曾经历过的网赚黄金时代

半个月前与网友讨论曾经的一些网赚时代&#xff0c;中国互联网发展近20年&#xff0c;网赚也曾经过许多值得大家回忆与讨论的时代&#xff0c;每一个时代都成就了批富翁&#xff0c;他们的背后有的是沧桑&#xff0c;有的是肮脏&#xff0c;网赚就是这样&#xff0c;本身就是一…

Vue自学(5)查缺补漏(2020-10-08)

每个绑定都只能包含单个表达式{{单个表达式}} 模板表达式——可使用Math和Date v-bind:style [值1&#xff0c; 值2 ]数组中的值1 和值2 中存储的是一个对象 这个对象里面存储的 css属性和 属性值 v-bind:style { 键&#xff1a; 值 }键 代表 CSS的属性 值 存贮的是 …

delphi版本对应

delphi 7delphi 8delphi 2005 ----- 9delphi 2006 ----- 10delphi 2007 ----- 11delphi 2009 ----- 12delphi 2010 ----- 14delphi xe --------15delphi xe2 --------16转载于:https://www.cnblogs.com/xtfnpgy/p/9285387.html

hdu2112 HDU Today 基础最短路

这题的关键是把车站的名字转化为点的编号。我用的是map。声明一个map<string,int> st,然后按照字符串出现的次序给st赋值。例如&#xff1a;st[s1]2;代表这字符串s1出现的次序是2。出现过的已经被标记。不会重复。接下来用模版就好。不过有一点要注意的是当起点和终点一样…

初识VUE项目的文档(2020-10-09)

项目 A Vue.js project Build Setup # install dependencies npm install# serve with hot reload at localhost:8080 npm run dev# build for production with minification npm run build# build for production and view the bundle analyzer report npm run build --repor…

Android自己定义组件系列【9】——Canvas绘制折线图

有时候我们在项目中会遇到使用折线图等图形&#xff0c;Android的开源项目中为我们提供了非常多插件&#xff0c;可是非常多时候我们须要依据详细项目自己定义这些图表&#xff0c;这一篇文章我们一起来看看怎样在Android中使用Canvas绘制折线图。先看看绘制的效果&#xff1a;…