delphi 如何在XML文档中写入多个字符

gopyfrb3  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(88)

我试图保存一个word和一个boolean值,我在一个记录数组中,到一个XML文档。这是我的代码:

procedure AddArrayToXMLFile(const Array : array of TKeycodeRecord; const Name : string);
var
  XMLFile : IXMLDocument;
  NameNode, ArrayFieldNode: IXMLNode;
  i : integer;
begin
  if FileExists(ArrayXMLFilePath) then
  begin
    XMLFile := LoadXMLDocument(ArrayXMLFilePath);
  end
  else
  begin
    XMLFile := NewXMLDocument;
    NameNode := XMLFile.AddChild(Name);
    ArrayFieldNode := NameNode.AddChild('child');
  end;

  for i := 0 to Length(Array) - 1 do
  begin
    ArrayFieldNode.Attributes['keycode'] := Array[i].keycode;
    ArrayFieldNode.Attributes['shiftState'] := Array[i].shiftState;
  end;

  XMLFile.SaveToFile(ArrayXMLFilePath);
end;

字符串
结果是这样的:

<?xml version="1.0"?>
<TestName><child keycode="48" shiftState="false"/></TestName>


这个过程只保存数组的最后一个条目,这让我相信for loop只改变了第一个条目的值,而不是向XML文档添加更多的值。想要的结果看起来像这样,但是有更多的条目:

<?xml version="1.0"?>
<TestName><child keycode="52" shiftState="false"/></TestName>
<TestName><child keycode="70" shiftState="true"/></TestName>
<TestName><child keycode="75" shiftState="false"/></TestName>
<TestName><child keycode="49" shiftState="false"/></TestName>
<TestName><child keycode="48" shiftState="false"/></TestName>


或者像这样:

<?xml version="1.0"?>
<TestName><child keycode="48" shiftState="false"/><child keycode="49" shiftState="false"/><child keycode="48" shiftState="false"/>

s4n0splo

s4n0splo1#

需要在for循环中添加节点NameNodeArrayFieldNode,如下所示:

procedure AddArrayToXMLFile(const Array : array of TKeycodeRecord; const Name : string);
var
  XMLFile : IXMLDocument;
  NameNode, ArrayFieldNode: IXMLNode;
  i : integer;
begin
  if FileExists(ArrayXMLFilePath) then
  begin
    XMLFile := LoadXMLDocument(ArrayXMLFilePath);
  end
  else
  begin
    XMLFile := NewXMLDocument;
  end;

  NameNode := XMLFile.AddChild(Name);

  for i := 0 to Length(Array) - 1 do
  begin      
    ArrayFieldNode := NameNode.AddChild('child');
    ArrayFieldNode.Attributes['keycode'] := Array[i].keycode;
    ArrayFieldNode.Attributes['shiftState'] := Array[i].shiftState;
  end;

  XMLFile.SaveToFile(ArrayXMLFilePath);
end;

字符串
你所做的就是添加一个节点,然后在循环中,在每次迭代中更改同一节点的属性。

相关问题