【问题标题】:Exporting Data from a Data Table to a XML-File using XSD使用 XSD 将数据表中的数据导出到 XML 文件
【发布时间】:2015-12-16 14:22:11
【问题描述】:

我正在尝试使用我的 XSD 将我的数据从数据表导出到 XML 文件。因为我有另一个导入数据的函数,所以我希望导出看起来相同,所以我从 Import-XML-File 生成了一个 XSD。

导出数据的函数是:

public void Export(string CmdString)
    {
            cmd = new SqlCommand(CmdString, SqlConnector.conn);
            dt = new DataTable("tbl_Adresse");
            sda = new SqlDataAdapter(cmd);
            sda.Fill(dt);
            dt.WriteXml("..\\..\\..\\XmlDataHandler\\XMLFile_Export.xml", XmlWriteMode.WriteSchema);
    }

导入 XML 文件如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>

<tbl_address>
 <row delete="true" />
 <row Forename="Simon" Surname="Baker" MobileNr="+193434278" />
 <row Forename="Johnny" Surname="Depp" MobileNr="+173953278" />
 <row Forename="Michael" Surname="Jackson" MobileNr="+127425978" />
 <row Forename="Elvis" Surname="Prasley" MobileNr="+163645378" />
 <row Forename="Axl" Surname="Rose" MobileNr="+173975618" />
</tbl_address>

架构如下所示:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:element name="tbl_address">
 <xs:complexType>
  <xs:sequence>
    <xs:element name="row" maxOccurs="unbounded">
     <xs:complexType>
      <xs:attribute name="delete" type="xs:string"></xs:attribute>
     </xs:complexType>
    </xs:element>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>

目前 Export-XML-File 看起来像这样:

<?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:MainDataTable="tbl_address" msdata:UseCurrentLocale="true">
  <xs:complexType>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="tbl_address">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Forename" type="xs:string" minOccurs="0" />
            <xs:element name="Surname" type="xs:string" minOccurs="0" />
            <xs:element name="MobileNr" type="xs:string" minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:complexType>
</xs:element>
</xs:schema>

 <tbl_address>
  <Forename>Simon</Forename>
  <Surname>Baker</Surname>
  <MobileNr>+193434278</MobileNr>
 </tbl_address
 <tbl_address>
  <Forename>Johny</Forename>
  <Surname>Depp</Surname>
  <MobileNr>+173953278</MobileNr>
 </tbl_address
 <tbl_address>
  <Forename>Michael</Forename>
  <Surname>Jackson</Surname>
  <MobileNr>+127425978</MobileNr>
 </tbl_address
 <tbl_address>
  <Forename>Elvis</Forename>
  <Surname>Prasley</Surname>
  <MobileNr>+163645378</MobileNr>
 </tbl_address
 <tbl_address>
  <Forename>Axl</Forename>
  <Surname>Rose</Surname>
  <MobileNr>+173975618</MobileNr>
 </tbl_address
</NewDataSet>

为了使导出文件与导入文件看起来相同,我需要进行哪些更改?

【问题讨论】:

    标签: c# .net xml xsd


    【解决方案1】:

    将架构添加到数据表

                DataTable dt = new DataTable("tbl_Adresse");
                dt.ReadXmlSchema(fileName);
                sda = new SqlDataAdapter(cmd);
                sda.Fill(dt);
    ​
    

    【讨论】:

      【解决方案2】:

      除了将架构添加到您的 DataTable 对象(正如其他答案提到的那样)之外,我相信您的架构本身需要调整。

      我使用XSD 来解释您的输入 XML(作为示例)并将其转换为 XSD 模式表示。下面的架构是 XSD 返回的内容:

      <?xml version="1.0" encoding="utf-8"?>
      <xs:schema id="tbl_address" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xs:element name="tbl_address" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
          <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element name="row">
                <xs:complexType>
                  <xs:attribute name="delete" type="xs:string" />
                  <xs:attribute name="Forename" type="xs:string" />
                  <xs:attribute name="Surname" type="xs:string" />
                  <xs:attribute name="MobileNr" type="xs:string" />
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
      

      请注意,它与您发布的架构略有不同。请按照建议尝试这两个调整(向 DataTable 对象添加架构并修改架构以更紧密地匹配数据)并报告!

      【讨论】:

      • 现在我在“ReadXmlSchema”函数中收到一个错误,即“DataTable 与源中的任何 DataTable 都不匹配”...
      【解决方案3】:

      我现在解决了。

      导出函数如下所示:

      public void Export(string CmdString)
          {
              cmd = new SqlCommand(CmdString, SqlConnector.conn);
              da = new SqlDataAdapter(cmd);
              dt = new DataTable("row");
              ds = new DataSet("tbl_adress");
              dt.ReadXmlSchema("..\\..\\..\\XmlDataHandler\\XmlSchema.xsd");
              SqlConnector.da.Fill(dt);
              ds.Tables.Add(dt);
              ds.WriteXml("..\\..\\..\\XmlDataHandler\\XMLFile_Export.xml");
          }
      

      还有这样的架构:

      <?xml version="1.0" encoding="iso-8859-1"?>
      <xs:schema id="tbl_adress" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xs:element name="tbl_adress" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
          <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element name="row">
                <xs:complexType>
                  <xs:attribute name="delete" type="xs:string" />
                  <xs:attribute name="Forename" type="xs:string" />
                  <xs:attribute name="Surname" type="xs:string" />
                  <xs:attribute name="MobileNr" type="xs:string" />
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
      

      我创建了一个名为“tbl_adress”的数据集,并将数据表放入此数据集中。 通过这个,根节点元素被称为“tbl_adress”。

      通过我得到的其他答案,我可以解决架构问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-23
        • 2021-12-22
        相关资源
        最近更新 更多