<?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>

解决方案 »

  1.   

    在代码topNode.Text:='医院门诊交易流水号';
    下少写了一句   
    topNode:=XMLNode.AddChild('datasetyp');
    刚从C#转过来delphi2天,如果问题比较简单,请勿见笑!
    希望大家多多帮助!
      

  2.   

    原来使用xmldocument
    建议使用TNativeXML吧
    使用简单,功能强大
      

  3.   


    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,在你基础上改的
      

  4.   

    首先谢谢你对本帖的支持!我刚上班调试了一下
    产生的结果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>
      

  5.   

    在补充说明1点, 我xml里面的序号2,序号3并不是说序号+1,序号+2的到的,他是一个输入的项
      

  6.   

    uses
      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;
      

  7.   

    uses
      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;
      

  8.   

    明天看看,我以前做过EDI,比这个复杂是与商检局进行数据交换