有这样的文档:
<?xml version="1.0" encoding="GBK"?>
<RES>
<TYPE>5</TYPE>
<CMDType>0019</CMDType>
<TERMINAL_ID></TERMINAL_ID >
<TERMINAL_TYPE></TERMINAL_TYPE >
<UIM_ID></UIM_ID>
<GSN></GSN>
<START_TIME></START_TIME>
<RETURN_TIME><RETURN_TIME>
<REAL_TIME><REAL_TIME>
<LATITUDE></LATITUDE>
<LONGITUDE></LONGITUDE>
<VELOCITY></VELOCITY>
<ALTITUDE></ALTITUDE>
<RADIUS></ RADIUS>
<DIRECTION></DIRECTION>
</RES>
<?xml version="1.0" encoding="GBK"?>
<RES>
<TYPE>5</TYPE>
<CMDType>0019</CMDType>
<TERMINAL_ID></TERMINAL_ID >
<TERMINAL_TYPE></TERMINAL_TYPE >
<UIM_ID></UIM_ID>
<GSN></GSN>
<START_TIME></START_TIME>
<RETURN_TIME><RETURN_TIME>
<REAL_TIME><REAL_TIME>
<LATITUDE></LATITUDE>
<LONGITUDE></LONGITUDE>
<VELOCITY></VELOCITY>
<ALTITUDE></ALTITUDE>
<RADIUS></ RADIUS>
<DIRECTION></DIRECTION>
</RES>
<?xml version="1.0" encoding="GBK"?>
<RES>
<TYPE>5</TYPE>
<CMDType>0019</CMDType>
<TERMINAL_ID></TERMINAL_ID >
<TERMINAL_TYPE></TERMINAL_TYPE >
<UIM_ID></UIM_ID>
<GSN></GSN>
<START_TIME></START_TIME>
<RETURN_TIME><RETURN_TIME>
<REAL_TIME><REAL_TIME>
<LATITUDE></LATITUDE>
<LONGITUDE></LONGITUDE>
<VELOCITY></VELOCITY>
<ALTITUDE></ALTITUDE>
<RADIUS></ RADIUS>
<DIRECTION></DIRECTION>
</RES>
<?xml version="1.0" encoding="GBK"?>
<RES>
<TYPE>5</TYPE>
<CMDType>0019</CMDType>
<TERMINAL_ID></TERMINAL_ID >
<TERMINAL_TYPE></TERMINAL_TYPE >
<UIM_ID></UIM_ID>
<GSN></GSN>
<START_TIME></START_TIME>
<RETURN_TIME><RETURN_TIME>
<REAL_TIME><REAL_TIME>
<LATITUDE></LATITUDE>
<LONGITUDE></LONGITUDE>
<VELOCITY></VELOCITY>
<ALTITUDE></ALTITUDE>
<RADIUS></ RADIUS>
<DIRECTION></DIRECTION>
</RES>



由相同的n个xml文档组合而成,现在要把它分成一个个的独立的xml:
<?xml version="1.0" encoding="GBK"?>
<RES>
<TYPE>5</TYPE>
<CMDType>0019</CMDType>
<TERMINAL_ID></TERMINAL_ID >
<TERMINAL_TYPE></TERMINAL_TYPE >
<UIM_ID></UIM_ID>
<GSN></GSN>
<START_TIME></START_TIME>
<RETURN_TIME><RETURN_TIME>
<REAL_TIME><REAL_TIME>
<LATITUDE></LATITUDE>
<LONGITUDE></LONGITUDE>
<VELOCITY></VELOCITY>
<ALTITUDE></ALTITUDE>
<RADIUS></ RADIUS>
<DIRECTION></DIRECTION>
</RES>
大家帮我给一个想法!!!谢谢!!!!

解决方案 »

  1.   

    查找<?xml version="1.0" encoding="GBK"?>,然后根据其位置分割
      

  2.   

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      SL, SL2: TStringList;
      S: string;
      iPos, I: Integer;
    const
      XMLHead = '<?xml version="1.0" encoding="GBK"?>';
    begin
      SL := TStringList.Create;
      SL2 := TStringList.Create;
      I := 0;
      try
        SL.LoadFromFile('c:\full.xml');
        iPos := Pos(XMLHead, SL.Text);
        while iPos > 0 do
        begin
          SL2.Text := Copy(SL.Text, 1, iPos -1);
          SL.Text := Copy(SL.Text, iPos + Length(XMLHead), MaxInt);
          iPos := Pos(XMLHead, SL.Text);
          if Trim(SL2.Text) <> '' then
          begin
            SL2.Text := XMLHead + SL2.Text;
            SL2.SaveToFile('c:\' + Format('%d.xml', [i]) );
            Inc(I);
          end;
        end;
        if Trim(SL.Text) <> '' then
        begin
          SL.Text := XMLHead + SL.Text;
          SL.SaveToFile('c:\' + Format('%d.xml', [i]) );
        end;
      finally
        SL2.Free;
        SL.Free;
      end;
    end;
      

  3.   

    谢谢老大!有个新问题!
    本人在客户端有一个Tclientsocket控件,专门接收Tserversocket发出的信息,采用的是发出Xml格式的文档,形如:
    <?xml version="1.0" encoding="GBK"?>
    <RES>
    <TYPE>2</TYPE>
    ...
    </RES>
    当接收后,clientsocket解析,在理想情况下:
    用下方法解:
       DWStr:=Socket.ReceiveText;
           XMLRead.Active := False;
           XMLRead.XML.Text := DWstr;
           XMLRead.Active := True;
           Root:= XMLRead.DocumentElement;
    if Root.ChildNodes['TYPE'].Text='2' then

    在理想情况下,来一条就解析一条,基本没有问题!但是现在发生一个问题:
    来的数据往往不是完整的一条或有很多条:
    <?xml version="1.0" encoding="GBK"?>
    <RES><TYPE>2</TYPE><TERMINAL_ID>A57018</TERMINAL_ID><TERMINAL_TYPE>TDW</TERMINAL_TYPE><UIM_ID>A57018</UIM_ID><GSN></GSN><START_TIME></START_TIME><RETURN_TIME>2006-06-29 10:41:45</RETURN_TIME><LATITUDE>30.556153</LATITUDE><LONGITUDE>114.277576</LONGITUDE><VELOCITY>33.336</VELOCITY><ALTITUDE>50</ALTITUDE><RADIUS>0</RADIUS><DIRECTION>29</DIRECTION></RES>
    <?xml version="1.0" encoding="GBK"?>
    <RES><TYPE>2</TYPE><TERMINAL_ID>FB0287</TERMINAL_ID><TERMINAL_TYPE>TDW</TERMINAL_TYPE><UIM_ID>FB0287</UIM_ID><GSN></GSN><START_TIME></START_TIME><RETURN_TIME>2006-06-29 10:41:45</RETURN_TIME><LATITUDE>32.258915</LATITUDE><LONGITUDE>111.455278</LONGITUDE><VELOCITY>24.076</VELOCITY><ALTITUDE>50</ALTITUDE><RADIUS>0</RADIUS><DIRECTION>29</DIRECTION></RES>或:
    <?xml version="1.0" encoding="GBK"?>
    <RES><TYPE>2</TYPE><TERMINAL_ID>A57018</TERMINAL_ID><TERMINAL_TYPE>TDW</TERMINAL_TYPE><UIM_ID>A57018</UIM_ID><GSN></GSN><START_TIME></START_TIME><RETURN_TIME>2006-06-29 10:41:45</RETURN_TIME><LATITUDE>30.556153</LATITUDE><LONGITUDE>114.277576</LONGITUDE><VELOCITY>33.336
    等一下才会有下半段:
    </VELOCITY><ALTITUDE>50</ALTITUDE><RADIUS>0</RADIUS><DIRECTION>29</DIRECTION></RES>
    等等情况。所以造成解析错误抱错!
    有什么好的办法吗?!要求数据量大,而且相应时间要快!因为每秒钟都有大量数据发回来!!!
    大家都想想呀!!!!