📄 xmldeal.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 + -