delphi 读取指定格式的xml
<?xmlversion="1.0"encoding="utf-8"standalone="yes"?><map><pointtype=""><pX="10"Y="10"...
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<map>
<point type="">
<p X="10" Y="10">1</p>
<p X="20" Y="20">2</p>
<p X="25" Y="25">3</p>
<p X="28" Y="28">4</p>
</point>
</map>
xml文件如上
如何循环读取每个点的坐标x和y值?
以及如何创建相同格式的xml?
最好能上源码 展开
<map>
<point type="">
<p X="10" Y="10">1</p>
<p X="20" Y="20">2</p>
<p X="25" Y="25">3</p>
<p X="28" Y="28">4</p>
</point>
</map>
xml文件如上
如何循环读取每个点的坐标x和y值?
以及如何创建相同格式的xml?
最好能上源码 展开
1个回答
展开全部
uses msxmldom, XMLDoc, XMLIntf;
// 注意节点名 属性名大小写
procedure TForm1.Button1Click(Sender: TObject);
var
// Xml 容器
XMLDoc: TXMLDocument;
IXMLDoc: IXMLDocument;
// Xml节点
Root_Node: IXMLNode;
Parent_Node: IXMLNode;
Child_Node: IXMLNode;
begin
XMLDoc:= TXMLDocument.Create(nil);
IXMLDoc:= XMLDoc;
try
XMLDoc.LoadFromFile('d:\Test.xml');
XMLDoc.Active:= True;
XMLDoc.Encoding:= 'UTF-8';
Root_Node:= XMLDoc.DocumentElement;
if Root_Node = nil then
Exit;
if Root_Node.NodeName <> 'map' then
Exit;
Parent_Node:= Root_Node.ChildNodes.First;
if Parent_Node = nil then
Exit;
if Parent_Node.NodeName = 'point' then
begin
Memo1.Lines.Add('point type = "' + Parent_Node.Attributes['type'] + '"');
Child_Node:= Parent_Node.ChildNodes.First;
while Child_Node <> nil do
begin
Memo1.Lines.Add(Child_Node.NodeName +
' ' + VarToStr(Child_Node.NodeValue) +
' x = ' + VarToStr(Child_Node.Attributes['X']) +
' y = ' + VarToStr(Child_Node.Attributes['Y']));
Child_Node:= Child_Node.NextSibling;
end;
end;
finally
IXMLDOC:= nil;
XMLDoc:= nil;
XMLDoc.Free;
end;
end;
// 注意节点名 属性名大小写
procedure TForm1.Button1Click(Sender: TObject);
var
// Xml 容器
XMLDoc: TXMLDocument;
IXMLDoc: IXMLDocument;
// Xml节点
Root_Node: IXMLNode;
Parent_Node: IXMLNode;
Child_Node: IXMLNode;
begin
XMLDoc:= TXMLDocument.Create(nil);
IXMLDoc:= XMLDoc;
try
XMLDoc.LoadFromFile('d:\Test.xml');
XMLDoc.Active:= True;
XMLDoc.Encoding:= 'UTF-8';
Root_Node:= XMLDoc.DocumentElement;
if Root_Node = nil then
Exit;
if Root_Node.NodeName <> 'map' then
Exit;
Parent_Node:= Root_Node.ChildNodes.First;
if Parent_Node = nil then
Exit;
if Parent_Node.NodeName = 'point' then
begin
Memo1.Lines.Add('point type = "' + Parent_Node.Attributes['type'] + '"');
Child_Node:= Parent_Node.ChildNodes.First;
while Child_Node <> nil do
begin
Memo1.Lines.Add(Child_Node.NodeName +
' ' + VarToStr(Child_Node.NodeValue) +
' x = ' + VarToStr(Child_Node.Attributes['X']) +
' y = ' + VarToStr(Child_Node.Attributes['Y']));
Child_Node:= Child_Node.NextSibling;
end;
end;
finally
IXMLDOC:= nil;
XMLDoc:= nil;
XMLDoc.Free;
end;
end;
追问
测试有效...
能否上个范例,怎么创建这种格式的xml?
追答
procedure TForm1.Button2Click(Sender: TObject);
var
// Xml 容器
XMLDoc: TXMLDocument;
IXMLDoc: IXMLDocument;
// Xml节点
Root_Node: IXMLNode;
Parent_Node: IXMLNode;
Child_Node: IXMLNode;
begin
XMLDoc:= TXMLDocument.Create(nil);
IXMLDoc:= XMLDoc;
try
XMLDoc.Active:= True;
XMLDoc.Encoding:= 'UTF-8';
XMLDoc.StandAlone:= 'yes';
Root_Node:= XMLDoc.AddChild('map');
Parent_Node:= Root_Node.AddChild('point');
Parent_Node.SetAttributeNS('type', '', '');
Child_Node:= Parent_Node.AddChild('p');
Child_Node.SetAttributeNS('X', '', '10');
Child_Node.SetAttributeNS('Y', '', '10');
Child_Node.NodeValue:= '1';
Child_Node:= Parent_Node.AddChild('p');
Child_Node.SetAttributeNS('X', '', '20');
Child_Node.SetAttributeNS('Y', '', '20');
Child_Node.NodeValue:= '2';
Child_Node:= Parent_Node.AddChild('p');
Child_Node.SetAttributeNS('X', '', '25');
Child_Node.SetAttributeNS('Y', '', '25');
Child_Node.NodeValue:= '3';
Child_Node:= Parent_Node.AddChild('p');
Child_Node.SetAttributeNS('X', '', '28');
Child_Node.SetAttributeNS('Y', '', '28');
Child_Node.NodeValue:= '4';
XMLDoc.SaveToFile('d:\Test1.xml');
finally
IXMLDOC:= nil;
XMLDoc:= nil;
XMLDoc.Free;
end;
end;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询