omn​​i xml create xml

时间:2011-11-09 16:07:17

标签: delphi delphi-2009 omnixml

以这种格式实现xml文件创建的最快方法是什么:

<?xml version="1.0" encoding="Unicode" standalone="yes"?>
<A V1="string" V2=String >
  <B>
    <C V3="1" V4="1" V5="0"/>
  </B>
  <C V6="14.25" V7="0.2"/>
  <D>
    <E V8="1" V9="1" V10="2">
    </E>
    <E V8="2" V9="1" V10="2">
       <F V11="a" V12="B">
         <G>0</G>
       </F>
    </E>
    <E V8="1" V9="1" V10="2">
    </E>
    <E V8="2" V9="1" V10="2">
      <F V11="a" V12="B">
        <G>0</G>
      </F>
    </E>
  </D>
</A>

有很多e,我可以在迭代中生成。

然而,我似乎无法掌握Omni的最佳方法。

为了这么多常数而创建10到20个对象似乎太乱了。

你还能提一下如何设置编码来生成文件吗?

1 个答案:

答案 0 :(得分:5)

这应该让你开始:

uses
  OmniXML,
  OmniXMLUtils;

procedure GetEAttr(var v8, v9, v10: integer);
begin
  v8 := Random(10);
  v9 := Random(10);
  v10 := Random(10);
end;

procedure TForm54.FormCreate(Sender: TObject);
var
  i     : integer;
  node1 : IXMLNode;
  node2 : IXMLNode;
  root  : IXMLNode;
  v10   : integer;
  v8    : integer;
  v9    : integer;
  xmlDoc: IXMLDocument;
begin
  xmlDoc := CreateXMLDoc;
  xmlDoc.AppendChild(xmlDoc.CreateProcessingInstruction('xml', 'version="1.0" encoding="Unicode" standalone="yes"'));
  root := AppendNode(xmlDoc, 'A');
  SetNodeAttr(root, 'V1', 'string');
  SetNodeAttr(root, 'V2', 'string');
  node1 := AppendNode(root, 'B');
  node2 := AppendNode(node1, 'C');
  SetNodeAttr(node2, 'V3', '1');
  SetNodeAttr(node2, 'V4', '1');
  SetNodeAttr(node2, 'V5', '0');
  node1 := AppendNode(root, 'C');
  SetNodeAttr(node1, 'V6', '14.25');
  SetNodeAttr(node1, 'V7', '0.2');
  node1 := AppendNode(root, 'D');
  for i := 1 to 4 do begin
    GetEAttr(v8, v9, v10);
    node2 := AppendNode(node1, 'E');
    SetNodeAttrInt(node2, 'V8', v8);
    SetNodeAttrInt(node2, 'V9', v9);
    SetNodeAttrInt(node2, 'V10', v10);
  end;
  XMLSaveToFile(xmlDoc, 'test.xml', ofIndent);
end;