⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmldeal.pas

📁 xml deal sample for delphi
💻 PAS
字号:
unit XMLParser;

interface

uses
  Windows, SysUtils, Variants, Classes, xmldom, XMLIntf, msxmldom, XMLDoc, msxml, Dialogs;

type
  TOperatorXML = class
  private
    { Private declarations }
    FFileName: string;
    FDomDoc: IXMLDOMDocument;
  public
    { Public declarations }
    constructor Create(AXMLFile: string);
    procedure LoadFromFile(AXMLFile: string);
    procedure SaveToFile(AXMLFile: string);
    function GetCombInfo(ACombID: string): WideString;
    procedure SaveCombInfo(ACombInfoXML: WideString);
    function GetCombAttribute(ACombID, AAttrName: string): WideString;
    procedure SaveCombAttribute(ACombID, AAttrName, AAttrValue: string);
    function GetCombSecurities(ACombID: string): WideString;
    procedure SaveCombSecurities(ACombID: string; ASecuritiesXML: WideString);
    property FileName: string read FFileName;
  end;

implementation

{ TOperatorXML }

constructor TOperatorXML.Create(AXMLFile: string);
begin
  FDomDoc := CoDomDocument.Create;
  FDomDoc.load(AXMLFile);
  FFileName := AXMLFile;
end;

function TOperatorXML.GetCombInfo(ACombID: string): WideString;
var
  i: Integer;
  MyNode, NewNode: IXMLDomNode;
  MyNodeList: IXMLDomNodeList;
begin
  Result := '';
  MyNode := FDomDoc.selectSingleNode('Operator/CombList');
  if Trim(ACombID) <> '' then
    MyNodeList := MyNode.selectNodes('Comb/DATAPACKET/ROWDATA/ROW[@CombID=' + ACombID + ']')
  else
    MyNodeList := MyNode.selectNodes('Comb/DATAPACKET/ROWDATA/ROW');

  NewNode := MyNode.cloneNode(True).selectSingleNode('Comb/DATAPACKET/ROWDATA');
  NewNode.removeChild(NewNode.selectSingleNode('ROW'));

  for i := 0 to MyNodeList.length - 1 do
    NewNode.appendChild(MyNodeList.item[i].cloneNode(True)); 

  Result := NewNode.parentNode.xml;
end;

procedure TOperatorXML.SaveCombInfo(ACombInfoXML: WideString);
var
  MyNode: IXMLDomNode;
  InDomDoc: IXMLDOMDocument;
  InNodeList: IXMLDomNodeList;
  i: Integer;
  sCombID: string;
begin
  InDomDoc := CoDomDocument.Create;
  InDomDoc.loadXML(ACombInfoXML);
  InNodeList := InDomDoc.selectNodes('DATAPACKET/ROWDATA/ROW');
  for i := 0 to InNodeList.length - 1 do
  begin
    sCombID := InNodeList[i].attributes.getnameditem('CombID').nodeValue;
    MyNode := FDomDoc.selectSingleNode('Operator/CombList/Comb/DATAPACKET/ROWDATA/ROW[@CombID=' + sCombID + ']');
    MyNode.parentNode.replaceChild(InNodeList[i], MyNode);
  end;
  InDomDoc := nil;
  FDomDoc.save(FFileName);
end;

procedure TOperatorXML.LoadFromFile(AXMLFile: string);
begin
  FDomDoc.load(AXMLFile);
  FFileName := AXMLFile;
end;

procedure TOperatorXML.SaveToFile(AXMLFile: string);
begin
  if Trim(AXMLFile) <> '' then
    FDomDoc.save(AXMLFile)
  else if Trim(FFileName) <> '' then
    FDomDoc.Save(FFileName);
end;

function TOperatorXML.GetCombAttribute(ACombID, AAttrName: string): WideString;
var
  MyNode: IXMLDomNode;
begin
  MyNode := FDomDoc.selectSingleNode('Operator/CombList/Comb/DATAPACKET/ROWDATA/ROW[@CombID=' + ACombID + ']');
  Result := MyNode.attributes.getnameditem(AAttrName).nodeValue;
end;

procedure TOperatorXML.SaveCombAttribute(ACombID, AAttrName, AAttrValue: string);
var
  MyNode: IXMLDomNode;
begin
  MyNode := FDomDoc.selectSingleNode('Operator/CombList/Comb/DATAPACKET/ROWDATA/ROW[@CombID=' + ACombID + ']');
  MyNode.attributes.getnameditem(AAttrName).nodeValue := AAttrValue;
  FDomDoc.save(FFileName);
end;

function TOperatorXML.GetCombSecurities(ACombID: string): WideString;
var
  MyNode: IXMLDomNode;
begin
  Result := '';
  if Trim(ACombID) = '' then Exit;
  MyNode := FDomDoc.selectSingleNode('Operator/CombList/Comb/DATAPACKET/ROWDATA/ROW[@CombID=' + ACombID + ']');
  Result := MyNode.selectSingleNode('../../../SecuritiesList/DATAPACKET').xml;
end;

procedure TOperatorXML.SaveCombSecurities(ACombID: string; ASecuritiesXML: WideString);
var
  InDomDoc: IXMLDOMDocument;
  MyNode, InNode: IXMLDomNode;
begin
  if Trim(ACombID) = '' then Exit;
  InDomDoc := CoDomDocument.Create;
  InDomDoc.loadXML(ASecuritiesXML);
  InNode := InDomDoc.selectSingleNode('DATAPACKET');
  MyNode := FDomDoc.selectSingleNode('Operator/CombList/Comb/DATAPACKET/ROWDATA/ROW[@CombID=' + ACombID + ']');
  MyNode.selectSingleNode('../../../SecuritiesList').replaceChild(InNode, MyNode.selectSingleNode('../../../SecuritiesList/DATAPACKET'));
  FDomDoc.save(FFileName);
end;



end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -