delphi中如何按自己的格式生成xml文件并从xml文件中解析到对应的编辑框?谢谢

Rabbit_Lap 2006-09-04 06:41:29
所有数据都保存到xml文件中,没有数据库!delphi中如何按自己的格式生成xml文件并从xml文件中解析到对应的编辑框?谢谢!!!
...全文
775 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rabbit_Lap 2006-09-05
  • 打赏
  • 举报
回复
谢谢。。。
wudi_1982 2006-09-04
  • 打赏
  • 举报
回复


创建IXMLDOMDocument对象的三种方法:
(1)[方法1] 直接创建 IXMLDOMDocument , 例(1)
uses msxml;
var DOC:IXMLDOMDocument;
doc := CoDOMDocument.create;
.....
Doc := nil;
A)doc.load(´C:\temp.xml´); //从文件载入
B) 动态创建
var aElement,aElement2: IXMLDOMElement; // [ aNode:IXMLDOMNode ==> .AppendChild() ]

//加入版本信息 ‘<?xml version="1.0" ?> ’
doc.AppendChild(doc.CreateProcessingInstruction(´xml´, ´version="1.0" encoding="GB2312"´));
(*)因为此函数返回结果不包含 ´encoding="GB2312"´ 故须保存前注意.
//加入根结点
doc.AppendChild(doc.CreateElement(´bootDocNode´)); //// == aElement
//加入子结点
aElement:=IXMLDOMElement(Doc.DocumentElement.AppendChild(Doc.CreateElement(´ChileNode1´)));
//设置接点属性
aElement.SetAttribute(´ID´, ´11´);
aElement.SetAttribute(´Units´, ´元/m2´);
//设置结点内容
aElement.AppendChild(Doc.CreateTextNode(´结点内容´));
//子结点添加子结点
aElement2:=IXMLDOMElement(aElement.AppendChild(Doc.CreateElement(´Child_ChileNode1´)));

(2) [方法2] 直接创建 IXMLDocument ( 不是IXMLDOMDocument )
uses XMLIntf,XMLDoc;
var xmlDoc:IXMLDocument; aNode:IXMLNode; s:string;

xmlDoc := TXMLDocument.Create(nil);
try
//加入版本信息 ‘<?xml version="1.0" encoding="GB2312" ?> ’
xmlDoc.Active := True; xmlDoc.Version := ´1.0´; xmlDoc.Encoding :=´GB2312´;
//加入根结点
aNode:=xmlDoc.AddChild(´bootDocNode´);
//加入子结点
aNode:=aNode.AddChild(´ChileNode1´);
//设置接点属性
aNode.SetAttribute(´ID´, ´22´);
aNode.SetAttribute(´Units´, ´元/m2´);
//设置结点内容
aNode.Text := ´结点内容´;
//子结点添加子结点
aNode:=aNode.AddChild(´Child_ChileNode1´) ;
aNode.Text := ´Child_ChileNod内容´;

s := xmlDoc.XML.Text ; // .XML 返回的是 Tstrings
finally
xmlDoc := nil ;
end;

(3)利用 XMLDataBinding
I) 准备好XML文件,此XML文件有较强的代表性,保证程序中所用的结点及其关系都存在
II)利用 file-->new-->XML Data Binding
III)创建XML对象
A)v:string; //XML文件内容
Doc : IXMLBudgetDocTyp; //IXMLBudgetDocTyp是XML文件的根结点
Doc := LoadXMLData(v).GetDocBinding(´BudgetDoc´, TXMLBudgetDocType) as IXMLBudgetDocType;
B)Doc := LoadBudgetDoc(´C:\temp.xml´);
IV) 应用
Doc.ChildNodes.FindNode(´Docfile´) as IXMLDocfileType;

(4)利用TXMLDocument控件
XMLDocument1.fileName:=´C:\temp.xml´;
XMLDocument1.active:=true; // XMLDocument1 相当于 Doc

(5)XML对象的其他方法
IXMLNodeList.FindNode(NodeName: DOMString): IXMLNode;
IXMLNodeList.FindNode(NodeName, NamespaceURI: DOMString): IXMLNode;
IXMLNodeList.FindNode(ChildNodeType: TGuid): IXMLNode;
IXMLNodeList.FindSibling(const Node: IXMLNode; Delta: Integer): IXMLNode;
IXMLNodeList.First: IXMLNode;
IXMLNodeList.Last: IXMLNode;
... ...

////////////////////////////////////////////////////////////////////////
//例(1)
uses msxml;
doc:IXMLDOMDocument;
budgetdoc:ixmlDomNode;
Rela:IxmlDOMNode;
rs:ixmldomnodelist;

//建立或取得XML结点
doc := CoDOMDocument.create;
doc.load(´C:\temp.xml´);
budgetDoc := doc.selectSingleNode(´BudgetDoc´);
rela := budgetdoc.SelectSingleNode(´Relation´);

//创建XML子结点
if not assigned(rela) then
begin
rela := doc.createElement(´Relation´);
rela.setAttribute(´BudgetId´,0);
rela.setAttribute(´name´,´名称´);
budgetdoc.appendChild(rela);
end;

//取子结点(序列)
rs := rela.selectNodes(´Rela[@BudgetId="2" and @TaskId="8"]´);
for i := 0 to rs.length -1 do
begin
s:= s + rs[i].attributes.getnameditem(´NewRate´).nodeValue;
end;

rela:=doc.ChildNodes.FindNode(´DOMNode´) as IxmlDOMNode;

//移除子结点
for i := rs.length -1 downto 1 do
rela.removeChild(rs[i])

//取父结点
if assigned(anode.parentNode) and (Anode.parentNode.nodeName=´Task´) then
result := Anode.parentNode;

//取属性
DOC.DocumentElement.Attributes[´Name´]
rela.Attributes[´Name´]
rs.Nodes[i].Attributes[´Name´]

Ajob:ixmldomnode;jobs:ixmldomNodeList;
jobs := Ajob.selectNodes(´RCJ[@Attrib="´+AAttrib+´"]´)

日总是我哥 2006-09-04
  • 打赏
  • 举报
回复
sf~

830

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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