用于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;