CB6中如何动态使用TXMLDocument?

ddeng 2002-09-17 04:46:25
将TXMLDocument放到TForm上可以正常使用,但如果动态创建TXMLDocument就出问题了,搞不懂到底为什么。

//正确执行,XMLDocument1放在FORM上:
XMLDocument1->LoadFromFile(L"test.xml");
::ShowMessage(tmp->Encoding);//这儿没错
::ShowMessage(tmp->FileName);

但是,以下动态创建的就错了:
TXMLDocument *tmp = new TXMLDocument("");
tmp->LoadFromFile(L"test.xml");
::ShowMessage(tmp->Encoding);//这儿就错了
::ShowMessage(tmp->FileName);
delete tmp;

TXMLDocument对象在new之后需要什么特殊处理吗?
...全文
87 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
microlazy 2002-11-26
  • 打赏
  • 举报
回复
mark
zldjp 2002-10-11
  • 打赏
  • 举报
回复
_di_IXMLDocument xmlDoc;
xmlDoc = LoadXMLDocument(FileName)
caodichong 2002-10-10
  • 打赏
  • 举报
回复
这是这个控件的一个BUG,它必须在FORM和DATAMOUDLE中才能正常运行.
哈哈,苦思大半天,终于叫我想到了一个好办法.不敢藏私,公开代码如下:
记得设计TDataModule2 窗口,之中放置XMLDocument1控件,然后在auto-creat forms去掉DataModule2 窗口
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String temstr;
IXMLNode *node;
IXMLNodeList *nodelist=NULL;
int i,endloop;
TXMLDocument *XMLDocument1;
TDataModule2 *DataModule2;
try{

DataModule2= new TDataModule2(this);
XMLDocument1=DataModule2->XMLDocument1;
XMLDocument1->Active=true;
XMLDocument1->LoadFromFile(L"sample.xml");
ShowMessage(XMLDocument1->Encoding);
nodelist=XMLDocument1->ChildNodes;
i= nodelist->Count;
node=XMLDocument1->ChildNodes->FindNode("CSDNHelper");
if(node->GetNodeType()==ntElement){
Memo1->Lines->Add(node->GetNodeName()+":这是一个母节点");
nodelist=node->GetChildNodes();
endloop=nodelist->GetCount();
for(i=0;i<endloop;i++){
//Memo1->Lines->Add(nodelist->Nodes[i]->GetNodeName());
if(nodelist->Nodes[i]->GetNodeType()!=ntElement){
temstr=node->GetNodeValue();
Memo1->Lines->Add(temstr);
}
else Memo1->Lines->Add(nodelist->Nodes[i]->GetNodeName()+":这是一个母节点");
}
}
else{
temstr=node->GetNodeValue();
Memo1->Lines->Add(temstr);
}
}
catch(Exception &exception) {
ShowMessage(exception.Message);
}
delete DataModule2;
}
TR@SOE 2002-10-09
  • 打赏
  • 举报
回复
好象还需要设置XMLDOCUMENT的DOMParser/DOMVendor属性才可以。
TopCat 2002-10-08
  • 打赏
  • 举报
回复
landy7203(landy) 你这样的代码会造成内存泄漏。呵呵。

XML2=new TXMLDocument("yourxml"); //这里分配了一块内存
XML2=Form1->XML; //这里把指针指向了XML,原来的内存就悬空了。



============================================
★仗剑走江湖 小侠令狐虫★
============================================
TopCat 2002-10-08
  • 打赏
  • 举报
回复
在使用之前用CoInitialize(NULL)初始化试试。
最后用CoUninitialize()析构


============================================
★仗剑走江湖 小侠令狐虫★
============================================
landy7203 2002-10-08
  • 打赏
  • 举报
回复
我这样使用它,先在Form1上摆上一个TXMLDocument控件,命名XML,然后就可以动态创建它了,代码如下

XML2=new TXMLDocument("yourxml");
XML2=Form1->XML;
XML2->Active=true;
ddeng 2002-09-26
  • 打赏
  • 举报
回复
哪位知道?我一直解决不了,真郁闷
ddeng 2002-09-20
  • 打赏
  • 举报
回复
哪位知道?我一直解决不了,真郁闷
ddeng 2002-09-17
  • 打赏
  • 举报
回复
Version也无法取啊
wxz 2002-09-17
  • 打赏
  • 举报
回复
的确奇怪,就是Encoding不能用,其他的好像都行。
-----------------------
CSDN离线浏览器
   往事悠悠
   网事幽幽
-----------------------

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧