首页 新闻 会员 周边 捐助

再问c#中 xml与dataset之间的关系与表示形式

0
悬赏园豆:5 [待解决问题]

在学习dataset与xml转换过程中,遇到了一个案例(其xml片段在结尾处),在其xml文件中,添加了xsd的构架信息(也就是xml的内容信息与xsd构架信息写在了一个xml文件中),而网上大部分的xml学习文献都是说xml与xsd文件是各自独立的,很困惑。网上搜集到“写入数据集内容作为 XML 数据”文献,其描述“在 ADO.NET 中可以编写 DataSet 的 XML 表示形式(包含或不包含其架构)。 如果架构信息以内联形式包含在 XML 表示形式中,则使用 XML 架构定义语言 (XSD) 来编写。 架构包含 DataSet 的表定义以及关系和约束定义。”不确认是否在描述xml与xsd合并的情况,请大神指点,或是有相关的详细文献赐教,谢谢

<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
  <xs:complexType>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="串口通讯">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="串口名称" type="xs:string" />
            <xs:element name="协议" type="xs:string" />
            <xs:element name="波特率" type="xs:integer" default="9600" />
            <xs:element name="数据位" type="xs:short" default="8" />
            <xs:element name="奇偶校验" type="xs:short" default="0" />
            <xs:element name="停止位" type="xs:short" default="1" />
            <xs:element name="编码" type="xs:short" default="0" />
            <xs:element name="超时" type="xs:integer" default="500" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
        <xs:complexType>

。。。。。。。。。。。。。
<串口通讯>
<串口名称>COM1</串口名称>
<协议>modbus</协议>
<波特率>9600</波特率>
<数据位>8</数据位>
<奇偶校验>0</奇偶校验>
<停止位>1</停止位>
<编码>0</编码>
<超时>500</超时>
</串口通讯>

rossi努力努力的主页 rossi努力努力 | 初学一级 | 园豆:8
提问于:2023-02-10 21:33
< >
分享
所有回答(1)
0

内联形式(inline)就是将 xsd(XML Schema Definition) 直接写在 xml 文件中,可以通过下面的代码验证

var dt = new DataTable("串口通讯");
dt.Columns.Add(new DataColumn("串口名称", typeof(string)));
dt.Columns.Add(new DataColumn("协议", typeof(string)));
var row = dt.NewRow();
row["串口名称"] = "COM1";
row["协议"] = "modbus";
dt.Rows.Add(row);

var ds = new DataSet();
ds.Tables.Add(dt);
ds.WriteXml("dataset.xml", XmlWriteMode.WriteSchema);

生成的 dataset.xml 文件内容如下

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="串口通讯">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="串口名称" type="xs:string" minOccurs="0" />
                <xs:element name="协议" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <串口通讯>
    <串口名称>COM1</串口名称>
    <协议>modbus</协议>
  </串口通讯>
</NewDataSet>
dudu | 园豆:30757 (高人七级) | 2023-02-11 12:59

大神,<xs:element name="串口名称" type="xs:string" minOccurs="0" />中的minOccurs="0"如何去掉呢

支持(0) 反对(0) rossi努力努力 | 园豆:8 (初学一级) | 2024-01-18 14:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册