【问题标题】:Importing flat XML data into SQLite database in c#.net在 c#.net 中将平面 XML 数据导入 SQLite 数据库
【发布时间】:2014-04-14 13:40:52
【问题描述】:

我通过在 c#.net 中导出我的 SQLite 数据库生成了一个 XML 文件。我生成的 XML 类似于-

<root>
   <name1>
      <names>
         <id>5</id>           
         <from>Germany</from>
         <to>France</to>
         <through>
            <via>
                 <id>7</id>
                 <routeNo>5<routeNo>
                 <route>Vienna<route>
             </via>
         </through>           
     </names>
     <names>
         <id>10</id>           
         <from>US</from>
         <to>Canada</to>
         <through>
            <via>
                 <id>8</id>
                 <routeNo>10<routeNo>
                 <route>Mexico<route>
             </via>
         </through>           
     </names>
   </name1>
</root>

然后我将此文件转换为平面 XML 数据,例如 -

<names id="5" from="Germany" to="France"> 
    <through id="9" routeNo="5" route="Vienna" /> 
    <through id="10" routeNo="5" route="russia" /> 
</names> 

我已将此 XML 文件导入 SQLite 数据库。我使用以下代码导入 -

SQLiteConnection sqlite_conn = new SQLiteConnection("Data Source=SGLight_empty.fmeda;Version=3;New=True;Compress=True;");
            NDbUnit.Core.INDbUnitTest sqliteDatabase = new NDbUnit.Core.SqlLite.SqlLiteUnitTest(sqlite_conn);
            string xsdFilename = "myXSD.xsd";
            string xmlFilename = "myXML.xml";

            sqliteDatabase.ReadXmlSchema(xsdFilename);
            sqliteDatabase.ReadXml(xmlFilename);

sqliteDatabase.PerformDbOperation(NDbUnit.Core.DbOperationFlag.CleanInsertIdentity);

现在,问题在于它适用于普通 XML 文件,即我无法导入从普通 XML 转换的平面 XML 文件。谁能帮我修改它,以便我也可以从平面 XML 导入数据?

【问题讨论】:

  • 您是否修改了 xsd 以匹配平面 XML?
  • 我通过拖放数据库表在服务器资源管理器中创建了 XSD。如何将其修改为平面 xml 格式?修改 XSD 会起作用还是有什么方法可以加载平面 XML?
  • @cahinton 你能给我任何与平面 XML 匹配的示例 XSD 吗?

标签: c# xml sqlite ndbunit


【解决方案1】:

需要考虑的一个问题是,SQLite 是否能够识别 XML 并将其与生成完整 XML 的数据库模式相匹配,即使对于扁平化的 XML 有正确的 XSD。为什么首先需要扁平化 XML?

话虽如此,Windows SDK 附带了一个 xsd 工具,可以从任意 XML 文件推断 XSD。我将您的“平面”xml 复制到名为 temp.xml 的文件中,运行 xsd temp.xml,并收到此 XSD 定义:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="names">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="through" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attribute name="id" type="xs:string" />
            <xs:attribute name="routeNo" type="xs:string" />
            <xs:attribute name="route" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" />
      <xs:attribute name="from" type="xs:string" />
      <xs:attribute name="to" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="names" />
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

【讨论】:

  • 实际上我可以在 Visual Studio 中从 XML 生成 XSD。但。就我而言,它不起作用。然后我需要从 sqlite 数据库创建 XSD,它正在为要导入的普通 XML 数据工作,我为此使用了 NDbUnit。而且,我的项目需要将 sqlite 数据库导出到平面 XML 并将这些数据导入回 sqlite 数据库。
  • 无论如何,我正在尝试你的方法。
猜你喜欢
  • 1970-01-01
  • 2014-01-23
  • 2014-02-02
  • 1970-01-01
  • 2020-07-28
  • 2018-09-09
  • 2020-07-22
  • 2021-04-12
  • 1970-01-01
相关资源
最近更新 更多