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