小弟使用C#语言,在VS2005里面解析结构XML文件,希望把XML文件分解成多小块存入SQL2005里面,但是分解了8000多个的时候,VS蹦错误对话框: 
XML分析:行4,字符2075,非法的限定名称字符
后来我找到了这个字符是“&”
但是我已经用代码进行的转义,但是还是报这个错误,每次都卡到哪里不能继续代码如下:
                if (xmltxtrd.NodeType == XmlNodeType.EndElement && xmltxtrd.Name == "DescriptorRecord")
                {
                    string appo = null;
                    appo = attand + attandele + "</DescriptorRecord>" + "</DescriptorRecordSet>";
                    string appo1 = appo.Replace("'", "\"");
                    appo1 = appo1.Replace("&amp;", "&");    //这个就是后来添加的;
                    appo1 = appo1.Replace("&", "or");       //因为文中还有单独的&符号,之前都对&进行了转义                    i = i + 1;                    Console.WriteLine("xmlID:{0}", i);
                    DBConn.sqlCommand.CommandText = "insert into DocXml(xmlID,docData) values ('" + i + "','" + appo1 + "')";
                    DBConn.sqlCommand.ExecuteNonQuery();                                        Console.WriteLine(DateTime.Now.ToString());
                    attandele = null;                    continue;
不知道大家还有谁遇到过这种问题,怎么解决的。
              

解决方案 »

  1.   

    1、你要搞明白为什么要分块存储,直接存xml类型的字段不就可以了,或者退一步使用text类型存储
    2、构建xml最好别自己拼接字符串,直接使用xmlDocument来构建,它会自动处理转义字符
    3、插入数据库是最好使用带参数的insertcommand,不要自己拼sql语句,可能就会有sql注入的危险
      

  2.   

    我就是想把300M的XML文件, 直接存XML类型的字段到SQL里面 因为我要对里面很多信息进行提取,又不能直接在300M的文件里面提,更何况里面结构太复杂,我的水平也达不到
    你的意思是我把xmltxtreader 给换成xmlDocument? 
      

  3.   


    那到不用把xmltxtreader 给换成xmlDocument,但生成xml可以使用xmltextwritter啊,就是不要自己去拼接,尽量使用系统提供的方法。
    sql 2005有强大的xml查询功能,而且还可以建索引,提取信息应该不是问题,你可以查查sql 2005的在线帮助,肯定比你现在的想法简单。