使用 XSD 将数据从数据 Table 导出到 XML 文件
Exporting Data from a Data Table to a XML-File using XSD
我正在尝试使用我的 XSD 将我的数据从数据 Table 导出到 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>
目前导出-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: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>
我必须更改什么才能使导出文件看起来与导入文件相同?
向 DataTable 添加架构
DataTable dt = new DataTable("tbl_Adresse");
dt.ReadXmlSchema(fileName);
sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
除了向您的 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 对象并修改架构以更接近数据匹配)并报告回来!
我现在解决了
导出函数如下所示:
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".
有了我得到的其他答案,我可以用架构解决问题。
我正在尝试使用我的 XSD 将我的数据从数据 Table 导出到 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>
目前导出-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: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>
我必须更改什么才能使导出文件看起来与导入文件相同?
向 DataTable 添加架构
DataTable dt = new DataTable("tbl_Adresse");
dt.ReadXmlSchema(fileName);
sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
除了向您的 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 对象并修改架构以更接近数据匹配)并报告回来!
我现在解决了
导出函数如下所示:
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".
有了我得到的其他答案,我可以用架构解决问题。