请教:将ClientDataSet中的数据保存为XML文件后的读取问题,谢谢!

时间:2021-06-12 11:49:54

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ClientDataSet1->Open();
   ClientDataSet1->SaveToFile(ExtractFilePath(Application->ExeName)+"local.xml",dfXML);
   ClientDataSet1->Close();
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    //myXML为拖放在Form1上的一个XMLDocument控件
    myXML->Active=false;
    myXML->FileName=ExtractFilePath(Application->ExeName)+"local.xml";
    myXML->Active=true;
}

先点击Button1,将ClientDataSet1中的数据存为一个XML文件,然后,再单点Button2,此时弹出错误提示:An invalid character was found in text content.

请问如何解决?开发环境:BCB6,系统为三层结构,数据库为Interbase6.5。

注:如果打开保存的XML文件,并在开头手工添加“encoding="gb2312"”并保存后再点击Button2时则一切正常。
可问题是不可能每次从ClientDataSet1中保存为XML文件后都要手工打开添加编码类型啊。

6 个解决方案

#1


提示里面有无效字符,例如<,>  />等等
替换一下吧
例如:
< 替换为&lt; 
>替换为&gt;
这样就可以了.

#2


试试这样行不
myXML->Active=false;
myXML->LoadFromFile(WideString(ExtractFilePath(Application->ExeName)+"local.xml"
));     //根据地址载入XML文档信息
myXML->Encoding = "gb2312";          //XML文档编码
myXML->Active = true;                //打开XML文档信息

#3


1、XML文件除编码问题(头部无encoding)之外,并无任何无效字符。

2、曾尝试过“myXML->Encoding="gb2312";”但报错:Access violation at ......
Encoding属性甚至连读取都要报错,不知什么原因啊

#4


另外,如果ClientDataSet1中的数据全部为英文或数值的话,则不需手工在XML文件的头部添加Encoding标志即能正常。而一旦数据中有一个汉字,就必须要手工添加Encoding标签,否则便报错:An invalid character was found in text content.

#5


求答案,自己顶一下

#6


读写都全部用TClientDataSet来做吧,这样可能不存在一些配置上的问题。
    读:
       pClientDataSet->Active=false;
        pClientDataSet->FileName = "aaa.xml";
        pClientDataSet->Active=true;
        while (!pClientDataSet->Eof){
            ComboBox1->Items->Add(pClientDataSet->FieldByName("ddd")->AsString);
            pClientDataSet->Next();
        }
        pClientDataSet->Active=false;

#1


提示里面有无效字符,例如<,>  />等等
替换一下吧
例如:
< 替换为&lt; 
>替换为&gt;
这样就可以了.

#2


试试这样行不
myXML->Active=false;
myXML->LoadFromFile(WideString(ExtractFilePath(Application->ExeName)+"local.xml"
));     //根据地址载入XML文档信息
myXML->Encoding = "gb2312";          //XML文档编码
myXML->Active = true;                //打开XML文档信息

#3


1、XML文件除编码问题(头部无encoding)之外,并无任何无效字符。

2、曾尝试过“myXML->Encoding="gb2312";”但报错:Access violation at ......
Encoding属性甚至连读取都要报错,不知什么原因啊

#4


另外,如果ClientDataSet1中的数据全部为英文或数值的话,则不需手工在XML文件的头部添加Encoding标志即能正常。而一旦数据中有一个汉字,就必须要手工添加Encoding标签,否则便报错:An invalid character was found in text content.

#5


求答案,自己顶一下

#6


读写都全部用TClientDataSet来做吧,这样可能不存在一些配置上的问题。
    读:
       pClientDataSet->Active=false;
        pClientDataSet->FileName = "aaa.xml";
        pClientDataSet->Active=true;
        while (!pClientDataSet->Eof){
            ComboBox1->Items->Add(pClientDataSet->FieldByName("ddd")->AsString);
            pClientDataSet->Next();
        }
        pClientDataSet->Active=false;