📄 ubatmodify.pas
字号:
unit uBatModify;
interface
uses
Classes,SysUtils;
type
TXModifyOption=record
NodeNames,
Attribs,
SourceText,
ReplaceText:string;
SkipDxx:Boolean;
end;
function ModifyXmlFile(AFile:string;AOption:TXModifyOption):Boolean;
implementation
uses uBaseXmlClass;
function ModifyXmlFile(AFile:string;AOption:TXModifyOption):Boolean;
procedure DoModifyIt(ANode:TCMLNode);
var
i:Integer;
vAtt:TCMLAttri;
vReplaceFlags:TReplaceFlags;
begin
if (AOption.NodeNames='') or
(Pos(','+ANode.Name+',',AOption.NodeNames)>0) then
begin
vReplaceFlags:=[rfReplaceAll];
if AOption.SkipDxx then vReplaceFlags:=vReplaceFlags+[rfIgnoreCase];
for i := 0 to ANode.Attris.Count - 1 do
begin
vAtt:=ANode.Attris.Items[i];
if (AOption.Attribs='') or
(Pos(','+vAtt.Name+',',AOption.Attribs)>0) then
begin
if Pos(AOption.SourceText,vAtt.Value)>0 then
begin
vAtt.Value:=StringReplace(vAtt.Value,AOption.SourceText,
AOption.ReplaceText,vReplaceFlags);
Result:=True;
end;
end;
end;
end;
end;
procedure LoopNodes(ANode:TCMLNode);
var
i:Integer;
vChild:TCMLNode;
begin
DoModifyIt(ANode);
for i := 0 to ANode.Childs.Count - 1 do
begin
vChild:=ANode.Childs[i];
LoopNodes(vChild);
end;
end;
var
vCmlDoc:TCmlDoc;
begin
Result:=False;
if not FileExists(AFile) then Exit;
if AOption.SkipDxx then
begin
AOption.NodeNames:=UpperCase(AOption.NodeNames);
AOption.Attribs:=UpperCase(AOption.Attribs);
AOption.SourceText:=UpperCase(AOption.SourceText);
AOption.ReplaceText:=UpperCase(AOption.ReplaceText);
end;
if AOption.NodeNames<>'' then
AOption.NodeNames:=','+AOption.NodeNames+',';
if AOption.Attribs<>'' then
AOption.Attribs:=','+AOption.Attribs+',';
vCmlDoc:=TCmlDoc.Create('');
try
vCmlDoc.LoadFromFile(AFile);
LoopNodes(vCmlDoc.Root);
if Result then
vCmlDoc.SaveToFile(AFile);
finally
vCmlDoc.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -