【发布时间】:2016-09-28 07:33:10
【问题描述】:
我想在 Delphi 10.1 中使用以下格式创建一个 XML 文件
<EmployeeDB>
<Employees>
<Employee e.id="1">
<eName>value from Edit Box edtName</eName>
<ePlace>value from Edit Box edtPlace</ePlace>
</Employee >
<Employee e.id="2">
<eName>value from Edit Box edtName</eName>
<ePlace>value from Edit Box edtPlace</ePlace>
</Employee >
<Employee e.id="3">
<eName>value from Edit Box edtName</eName>
<ePlace>value from Edit Box edtPlace</ePlace>
</Employee >
</Employees>
</EmployeeDB>
我想从注册表单中获取数据,当单击“确定”按钮时,它应该将来自编辑框、单选按钮等的数据添加到 XML 文件中。
我是 Delphi 编程新手,请帮我解决这个问题。
我试过这样写代码:
unit XMLTrail;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, XMLIntf, XMLDoc, ComObj, xmldom,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
Tfrm_XMLTrail = class(TForm)
edt_eID: TEdit;
edtName: TEdit;
edtPlace: TEdit;
Memo1: TMemo;
btnAdd: TButton;
procedure btn_AddClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure LoadXML;
procedure SaveXML;
public
{ Public declarations }
XMLDoc1: TXmlDocument;
iNode, Root1, Root2, Child_Attrib_Name, Child_Attrib_Place: IXmlNode;
function GetEmployeeDBNode(XMLDoc: TXmlDocument): IXmlNode;
function GetEmployeesNode(EmployeeDBNode: IXmlNode): IXmlNode;
end;
var
frm_XMLTrail: Tfrm_XMLTrail;
implementation
{$R *.dfm}
const
scXmlTemplate = '<EmployeeDB>'#13#10 + ' <Employees>'#13#10 +
' </Employees>'#13#10 + '</EmployeeDB>';
scXmlFileName =
'C:\Users\Rajesh\Documents\Embarcadero\Studio\Projects\Samples\XML trail\Win32\Debug\nicexml.xml';
procedure Tfrm_XMLTrail.btn_AddClick(Sender: TObject);
begin
XMLDoc1.Active := true;
iNode := XMLDoc1.DocumentElement;
Root1 := iNode.ChildNodes.FindNode('Employees');
Root2 := Root1.AddChild('Employee');
Root2.Attributes['e.id'] := edt_eID.Text;
Child_Attrib_Name := Root2.AddChild('eName');
Child_Attrib_Name.Text := edtName.Text;
Child_Attrib_Place := Root2.AddChild('ePlace');
Child_Attrib_Place.Text := edtPlace.Text;
XMLDoc1.Active := true;
XMLDoc1.SaveToFile(scXmlFileName);
end;
procedure Tfrm_XMLTrail.FormCreate(Sender: TObject);
begin
XMLDoc1 := TXmlDocument.Create(nil);
if not FileExists(scXmlFileName) then
begin
// XMLDoc1 := TXmlDocument.Create(nil);
XMLDoc1.Active := true;
XMLDoc1.Options := [doNodeAutoIndent];
iNode := XMLDoc1.AddChild('UmangEmployeeDB');
Root1 := iNode.AddChild('Employees');
end
else
begin
LoadXML;
end;
end;
procedure Tfrm_XMLTrail.LoadXML;
begin
XMLDoc1.LoadFromFile(scXmlFileName);
Memo1.Lines.Text := XMLDoc1.XML.Text;
// SaveXML;
// Memo1.Lines.LoadFromFile(scXmlFileName);
// XMLDoc1 := TXmlDocument.Create(nil);
// Assert(Root1 <> Nil);
end;
procedure Tfrm_XMLTrail.SaveXML;
begin
Memo1.Lines.SaveToFile(scXmlFileName);
end;
end.
但它返回的 XML 文件如下所示:
<EmployeeDB>
<Employees>
<Employee e.id="2">
<eName>sssss</eName>
<ePlace>fgr</ePlace>
</Employee>
<Employee e.id="2">
<eName>sssss</eName>
<ePlace>fgr</ePlace>
</Employee>
</Employees>
</EmployeeDB>
应用程序的 UI 类似于 Image。
当我输入数据后点击确定按钮时,它应该通过每次点击确定按钮时创建一个新的<Employee/> 节点将数据写入 XML 文件。
【问题讨论】:
-
SO 是关于特定的编程问题,而不是提供“操作方法”教程。你有什么问题?
-
这是个问题,我无法以我想要的格式生成 XML。你能帮我解决这个问题吗,@MartynA 我是这个 Delphi 编程的新手。
-
即使您对 q 进行了编辑,您也没有明确说明在您的问题中您的“所需”格式是什么,谁能帮助您实现它?
-
我想以 Post 之上的格式创建 XML 文件。
<EmployeeDB> <Employees> <Employee e.id="1"> <eName>value from Edit Box edtName</eName> <ePlace>value from Edit Box edtPlace</ePlace> </Employee > <Employee e.id="2"> <eName>value from Edit Box edtName</eName> <ePlace>value from Edit Box edtPlace</ePlace> </Employee > <Employee e.id="3"> <eName>value from Edit Box edtName</eName> <ePlace>value from Edit Box edtPlace</ePlace> </Employee > </Employees> </EmployeeDB> -
请。做。不是。问。在。评论。
标签: xml delphi delphi-10.1-berlin