小弟使用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("&", "&"); //这个就是后来添加的;
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;
不知道大家还有谁遇到过这种问题,怎么解决的。
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("&", "&"); //这个就是后来添加的;
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;
不知道大家还有谁遇到过这种问题,怎么解决的。
2、构建xml最好别自己拼接字符串,直接使用xmlDocument来构建,它会自动处理转义字符
3、插入数据库是最好使用带参数的insertcommand,不要自己拼sql语句,可能就会有sql注入的危险
你的意思是我把xmltxtreader 给换成xmlDocument?
那到不用把xmltxtreader 给换成xmlDocument,但生成xml可以使用xmltextwritter啊,就是不要自己去拼接,尽量使用系统提供的方法。
sql 2005有强大的xml查询功能,而且还可以建索引,提取信息应该不是问题,你可以查查sql 2005的在线帮助,肯定比你现在的想法简单。