<?xml version="1.0" encoding="GB2312" ?>
<data>
<YKC201>医院门诊交易流水号</YKC201>
<datasetyp>
<row>
<ykc120>序号</ykc120>
<yak201>数量</yak201>
<yka202>金额</yka202>
</row>
</datasetyp>
<datasetzl>
<row>
<yka201>数量</yka201>
<yka202>金额</yka202>
</row>
</datasetzl>
</data>
我已经实现了上面格式的xml文件,
实现代码如下:
function TForm1.I_XML_11(XMLDocument1:IXMLDocument):IXMLNode;
var
XMLNode,topNode,dataNode:IXMLNode;
i:integer;
text:textfile;
name:string;
begin
name:=ExtractFilePath(Application.Exename)+'I_XML_11.xml';
if not fileExists(name) then //如果delphi2008.txt不存在
begin
XMLDocument1.Active:=true;
XMLDocument1.version := '1.0';
XMLDocument1.Encoding:='GB2312';
XMLNode:=XMLDocument1.AddChild('data');
topNode:=XMLNode.AddChild('YKC201');
topNode.Text:='医院门诊交易流水号';
topNode:=topNode.AddChild('row');
dataNode:=topNode.AddChild('ykc120');
dataNode.Text:='序号'; dataNode:=topNode.AddChild('yak201');
dataNode.Text:='数量'; dataNode:=topNode.AddChild('yka202');
dataNode.Text:='金额';
topNode:=XMLNode.AddChild('datasetzl');
topNode:=topNode.AddChild('row');
dataNode:=topNode.AddChild('yka201');
dataNode.Text:='数量';
dataNode:=topNode.AddChild('yka202');
dataNode.Text:='金额';
XMLDocument1.SaveToFile('I_XML_11.xml');
end
else
XMLDocument1.LoadFromFile(ExtractFilePath(Application.Exename)+'I_XML_11.xml');
XMLDocument1.Active:=true;
//水平有限,这里真不知道怎么处理了
end;
end;问题:
我想实现如下功能:
<?xml version="1.0" encoding="GB2312" ?>
<data>
<YKC201>医院门诊交易流水号</YKC201>
<datasetyp>
<row>
<ykc120>序号</ykc120>
<yak201>数量</yak201>
<yka202>金额</yka202>
</row>
<row>
<ykc120>序号2</ykc120>
<yak201>数量2</yak201>
<yka202>金额2</yka202>
</row>
<row>
<ykc120>序号3</ykc120>
<yak201>数量3</yak201>
<yka202>金额3</yka202>
</row>
<row>
.....
<row>
</datasetyp>
<datasetzl>
<row>
<yka201>数量</yka201>
<yka202>金额</yka202>
</row>
<row>
<yka201>数量2</yka201>
<yka202>金额2</yka202>
<row>
<row>
<yka201>数量3</yka201>
<yka202>金额3</yka202>
<row>
<row>
.....
<row>
</datasetzl>
</data>
<data>
<YKC201>医院门诊交易流水号</YKC201>
<datasetyp>
<row>
<ykc120>序号</ykc120>
<yak201>数量</yak201>
<yka202>金额</yka202>
</row>
</datasetyp>
<datasetzl>
<row>
<yka201>数量</yka201>
<yka202>金额</yka202>
</row>
</datasetzl>
</data>
我已经实现了上面格式的xml文件,
实现代码如下:
function TForm1.I_XML_11(XMLDocument1:IXMLDocument):IXMLNode;
var
XMLNode,topNode,dataNode:IXMLNode;
i:integer;
text:textfile;
name:string;
begin
name:=ExtractFilePath(Application.Exename)+'I_XML_11.xml';
if not fileExists(name) then //如果delphi2008.txt不存在
begin
XMLDocument1.Active:=true;
XMLDocument1.version := '1.0';
XMLDocument1.Encoding:='GB2312';
XMLNode:=XMLDocument1.AddChild('data');
topNode:=XMLNode.AddChild('YKC201');
topNode.Text:='医院门诊交易流水号';
topNode:=topNode.AddChild('row');
dataNode:=topNode.AddChild('ykc120');
dataNode.Text:='序号'; dataNode:=topNode.AddChild('yak201');
dataNode.Text:='数量'; dataNode:=topNode.AddChild('yka202');
dataNode.Text:='金额';
topNode:=XMLNode.AddChild('datasetzl');
topNode:=topNode.AddChild('row');
dataNode:=topNode.AddChild('yka201');
dataNode.Text:='数量';
dataNode:=topNode.AddChild('yka202');
dataNode.Text:='金额';
XMLDocument1.SaveToFile('I_XML_11.xml');
end
else
XMLDocument1.LoadFromFile(ExtractFilePath(Application.Exename)+'I_XML_11.xml');
XMLDocument1.Active:=true;
//水平有限,这里真不知道怎么处理了
end;
end;问题:
我想实现如下功能:
<?xml version="1.0" encoding="GB2312" ?>
<data>
<YKC201>医院门诊交易流水号</YKC201>
<datasetyp>
<row>
<ykc120>序号</ykc120>
<yak201>数量</yak201>
<yka202>金额</yka202>
</row>
<row>
<ykc120>序号2</ykc120>
<yak201>数量2</yak201>
<yka202>金额2</yka202>
</row>
<row>
<ykc120>序号3</ykc120>
<yak201>数量3</yak201>
<yka202>金额3</yka202>
</row>
<row>
.....
<row>
</datasetyp>
<datasetzl>
<row>
<yka201>数量</yka201>
<yka202>金额</yka202>
</row>
<row>
<yka201>数量2</yka201>
<yka202>金额2</yka202>
<row>
<row>
<yka201>数量3</yka201>
<yka202>金额3</yka202>
<row>
<row>
.....
<row>
</datasetzl>
</data>
下少写了一句
topNode:=XMLNode.AddChild('datasetyp');
刚从C#转过来delphi2天,如果问题比较简单,请勿见笑!
希望大家多多帮助!
建议使用TNativeXML吧
使用简单,功能强大
var
XMLNode,topNode,dataNode:IXMLNode;
ANode: IXMLNode;//新增的一个Node
i:integer;
text:textfile;
name:string;
begin
name:=ExtractFilePath(Application.Exename)+'I_XML_11.xml';
if not fileExists(name) then //Èç¹ûdelphi2008.txt²»´æÔÚ
begin
XMLDocument1.Active:=true;
XMLDocument1.version := '1.0';
XMLDocument1.Encoding:='GB2312';
XMLNode:=XMLDocument1.AddChild('data');
topNode:=XMLNode.AddChild('YKC201');
topNode.Text:='Ò½ÔºÃÅÕï½»Ò×Á÷Ë®ºÅ'; ANode:=XMLNode.AddChild('datasetyp'); for i := 0 to 10 do
begin
topNode:=ANode.AddChild('row');
dataNode:=topNode.AddChild('ykc120');
dataNode.Text:='ÐòºÅ'+inttostr(i);
dataNode:=topNode.AddChild('yak201');
dataNode.Text:='ÊýÁ¿'+inttostr(i);
dataNode:=topNode.AddChild('yka202');
dataNode.Text:='½ð¶î'+inttostr(i);
end; ANode:=XMLNode.AddChild('datasetzl'); for i := 0 to 10 do
begin
topNode:=ANode.AddChild('row');
dataNode:=topNode.AddChild('yka201');
dataNode.Text:='ÊýÁ¿'+inttostr(i);
dataNode:=topNode.AddChild('yka202');
dataNode.Text:='½ð¶î'+inttostr(i);
end; XMLDocument1.SaveToFile('I_XML_11.xml'); end
else
begin
XMLDocument1.LoadFromFile(ExtractFilePath(Application.Exename)+'I_XML_11.xml');
XMLDocument1.Active:=true;
//ˮƽÓÐÏÞ£¬ÕâÀïÕæ²»ÖªµÀÔõô´¦ÀíÁË
end;
end;
就新增了一个Node,在你基础上改的
产生的结果row为包含而非并列!
另外代码有一点问题!可能是我没说清楚
在这里,for i:=0 to 10 do,这样执行的结果是一次往里面写了10个,而不是我需要的每运行程序一次,在往xml追加一次的效果
<row>
<ykc120>序号</ykc120>
<yak201>数量</yak201>
<yka202>金额</yka202>
</row>
<row>
<ykc120>序号2</ykc120>
<yak201>数量2</yak201>
<yka202>金额2</yka202>
</row>
<row>
<ykc120>序号3</ykc120>
<yak201>数量3</yak201>
<yka202>金额3</yka202>
</row>
<row>
.....
<row>
上面是我要的结果,根据你的代码,执行的结果为:
<row>
<ykc120>序号</ykc120>
<yak201>数量</yak201>
<yka202>金额</yka202>
<row>
<ykc120>序号2</ykc120>
<yak201>数量2</yak201>
<yka202>金额2</yka202>
<row>
<ykc120>序号3</ykc120>
<yak201>数量3</yak201>
<yka202>金额3</yka202>
</row>
</row>
</row>
xmldoc,xmlintf;
var
xmldoc: TXMLDocument;
dataNode: IXMLNode;
dataSetNode: IXMLNode;
dataRowNode: IXMLNode;
dataFieldNode: IXMLNode;
begin
xmldoc := TXMLDocument.Create(Nil);
try
xmldoc.Active := true;
xmldoc.Encoding := 'GB2312';
xmldoc.Options := [doNodeAutoIndent];
dataNode := xmldoc.CreateElement('data','');
xmldoc.DocumentElement := dataNode;
//<data>
dataSetNode := xmldoc.CreateElement('datasetyp', '');
dataNode.ChildNodes.Add(dataSetNode); //<datasetyp>
dataRowNode := xmldoc.CreateElement('row', '');
dataNode.ChildNodes.Add(dataRowNode); dataFieldNode := xmldoc.CreateElement('ykc120', '');
dataFieldNode.NodeValue := '序号';
dataRowNode.ChildNodes.Add(dataFieldNode); dataFieldNode := xmldoc.CreateElement('yak201', '');
dataFieldNode.NodeValue := '数量';
dataRowNode.ChildNodes.Add(dataFieldNode); dataFieldNode := xmldoc.CreateElement('yka202', '');
dataFieldNode.NodeValue := '金额';
dataRowNode.ChildNodes.Add(dataFieldNode); dataRowNode := xmldoc.CreateElement('row', '');
dataNode.ChildNodes.Add(dataRowNode);
//</datasetyp> dataSetNode := xmldoc.CreateElement('datasetzl', '');
dataNode.ChildNodes.Add(dataSetNode); //<datasetzl>
//</datasetzl>
//</data>
ShowMessage(xmldoc.XML.Text);
finally
xmldoc.Free;
end;
end;
xmldoc,xmlintf;
var
xmldoc: TXMLDocument;
dataNode: IXMLNode;
dataSetNode: IXMLNode;
dataRowNode: IXMLNode;
dataFieldNode: IXMLNode;
begin
xmldoc := TXMLDocument.Create(Nil);
try
xmldoc.Active := true;
xmldoc.Encoding := 'GB2312';
xmldoc.Options := [doNodeAutoIndent];
dataNode := xmldoc.CreateElement('data','');
xmldoc.DocumentElement := dataNode;
//<data>
dataSetNode := xmldoc.CreateElement('datasetyp', '');
dataNode.ChildNodes.Add(dataSetNode); //<datasetyp>
dataRowNode := xmldoc.CreateElement('row', '');
dataNode.ChildNodes.Add(dataRowNode); dataFieldNode := xmldoc.CreateElement('ykc120', '');
dataFieldNode.NodeValue := '序号';
dataRowNode.ChildNodes.Add(dataFieldNode); dataFieldNode := xmldoc.CreateElement('yak201', '');
dataFieldNode.NodeValue := '数量';
dataRowNode.ChildNodes.Add(dataFieldNode); dataFieldNode := xmldoc.CreateElement('yka202', '');
dataFieldNode.NodeValue := '金额';
dataRowNode.ChildNodes.Add(dataFieldNode); dataRowNode := xmldoc.CreateElement('row', '');
dataNode.ChildNodes.Add(dataRowNode);
//</datasetyp> dataSetNode := xmldoc.CreateElement('datasetzl', '');
dataNode.ChildNodes.Add(dataSetNode); //<datasetzl>
//</datasetzl>
//</data>
ShowMessage(xmldoc.XML.Text);
finally
xmldoc.Free;
end;
end;