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

📄 ubatmodify.pas

📁 批量 Xml 修改 Modify 批量 Xml 修改 批量 Xml 修改
💻 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 + -