解析XML文档时如何解决不正确的语法错误

时间:2019-08-27 08:18:18

标签: c# sql-server xml xml-parsing

我有一个程序可以将数据从XML文件导入到SQL Server表中。当我调试程序时,流程开始创建表时,我收到“ TRANSACTION附近的语法不正确”错误。我的XML的结构为:

    <?xml version="1.0" encoding="utf-16"?>
<EXPORT_HEADER xmlns="http://www.sir.com/SFI/Export/GL_Export/20051005" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.sir.com/SFI/Export/GL_Export/20051005  
GL_EXPORT.xsd" total_transactions="4616" total_accnts="2000">
 <TRANSACTION business_type_code="DIRECT" term="NB" />
  <TRANSACTION business_type_code="DIRECT" term="NB" />
  </EXPORT_HEADER>

但是,当我使用包含实际数据的TRANSACTION标记部分时,我想通过上面显示的语法错误进行提交:

    DataSet DS = new DataSet();
            DS.ReadXml(XMlFile);

            DataTable dt = DS.Tables[1];

            if (dt.Columns.Count == 0)
                dt.ReadXmlSchema(XMlFile);
                dt.ReadXml(XMlFile);

作为检查,我尝试使用EXPORT_HEADER部分,并且成功提交了标题中的数据,并且还创建了表:

 DataSet DS = new DataSet();
            DS.ReadXml(XMlFile);

            DataTable dt = DS.Tables[0];

            if (dt.Columns.Count == 0)
                dt.ReadXmlSchema(XMlFile);
                dt.ReadXml(XMlFile);

这是将XML数据导入到Sql Server表中的操作:

    private void btnImport_Click(object sender, EventArgs e)
    {
        const string XMlFile = @"C:\Users\tshumae\Documents\MyProjects\MyProject\GL_Export_54_201907081053.xml";
       // string XMlFile = txtFilePath.Text;
        if (File.Exists(XMlFile))
        {
            // Conversion Xml file to DataTable
            DataSet DS = new DataSet();
            DS.ReadXml(XMlFile);

            DataTable dt = DS.Tables[0];

            if (dt.Columns.Count == 0)
                dt.ReadXmlSchema(XMlFile);
                dt.ReadXml(XMlFile);


            // Creating Query for Table Creation
            string Query = CreateTableQuery(dt);
            SqlConnection con = new SqlConnection(StrCon);
            con.Open();

            // Deletion of Table if already Exist
            SqlCommand cmd = new SqlCommand("IF OBJECT_ID('dbo." + dt.TableName + "', 'U') IS NOT NULL DROP TABLE dbo." + dt.TableName + ";", con);
            cmd.ExecuteNonQuery();

            // Table Creation
            cmd = new SqlCommand(Query, con);
            int check = cmd.ExecuteNonQuery();
            if (check != 0)
            {
            // Copy Data from DataTable to Sql Table
            using (var bulkCopy = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.KeepIdentity))
            {

                foreach (DataColumn col in dt.Columns)
                {
                    bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
                }

                bulkCopy.BulkCopyTimeout = 600;
                bulkCopy.DestinationTableName = dt.TableName;
                bulkCopy.WriteToServer(dt);
            }

                MessageBox.Show("Table Created Successfully");
            }
            con.Close();
        }

    }

我不确定我的猜测是否正确,但是我认为TRANSACTION标签在结束标签中有一些空格字符。相反,EXPORT HEADER标签在结束标签中没有空格。如果确实如此,有人能指出正确的方向吗?或者文档中还有其他格式不正确的

0 个答案:

没有答案