InnoSetup XML操作函数

用于InnoSetup 5 以上。对XML文件的操作,简化InnoSetup XML访问过程。

1. [代码]InnoSetup 5 脚本    

{ ================================================================

  功能: 打开一个XML文档, 返回文档的Nodes对象

  参数: XMLFile     文档路径, 可以是有效的URL路径

        XMLRoot     文档的根节点对象

  返回: 无

}

procedure OpenXML(XMLFile: String; var XMLRoot: Variant);

var

	XMLDocument: Variant;

begin

  try

    XMLDocument := CreateOleObject('MSXML2.DOMDocument');

    XMLDocument.async := False;

    XMLDocument.resolveExternals := False;

    XMLDocument.load(XMLFile);

    XMLRoot := XMLDocument.documentElement;

  except

    RaiseException(ExpandConstant('{cm:LOADXMLFAILED}'));

  end;

end;





{ ================================================================

  功能: 在打开的XML文档中, 查找指定的节点

  参数: XMLNode   使用OpenXML打开的XML文档的节点

        Key       节点名字

        AttrName  节点属性名, 可以为空

        AttrValue 节点属性值, 可以为空

        FoundNode 找到的节点

  返回: 成功返回True 否则返回False

}

function FindXMLNodeByKey(XMLNode: Variant; KeyName: String; AttrName: String; AttrVal: String; var FoundNode: Variant) :Boolean;

var

  NodeIndex: Integer;

  Node: Variant;

begin

  Result := False;

  try

    if '' = AttrName then begin

      FoundNode := XMLNode.selectSingleNode(KeyName)

      Result := True;

    end else

      for NodeIndex := 0 to XMLNode.childNodes.length()-1 do begin

        Node := XMLNode.childNodes.item(NodeIndex);

        if (KeyName = Node.nodeName) and ( AttrVal = Node.Attributes.GetNamedItem(AttrName).value) then begin

            FoundNode := XMLNode.childNodes.item(NodeIndex);

            Result := True;

            break;

        end;

      end;

  except

    Result := False;

  end;

end;





{ ================================================================

  功能: 获取子节点的值

  参数: XMLNode   使用OpenXML打开的XML文档的节点

        Key       节点名字

  返回: 值, 获取失败时, 返回空

}

function GetXMLValue(XMLNode: Variant; KeyName: String) :String;

begin

  try

    Result := XMLNode.selectSingleNode(KeyName).text;

  except

    RaiseException(ExpandConstant('{cm:READXMLFAILED}'));

  end;

end;

你可能感兴趣的:(xml)