[代码]InnoSetup 5 脚本
01 | { ================================================================ |
02 | 功能: 打开一个XML文档, 返回文档的Nodes对象 |
03 | 参数: XMLFile 文档路径, 可以是有效的URL路径 |
04 | XMLRoot 文档的根节点对象 |
05 | 返回: 无 |
06 | } |
07 | procedure OpenXML(XMLFile: String ; var XMLRoot: Variant); |
08 | var |
09 | XMLDocument: Variant; |
10 | begin |
11 | try |
12 | XMLDocument := CreateOleObject( 'MSXML2.DOMDocument' ); |
13 | XMLDocument . async := False ; |
14 | XMLDocument . resolveExternals := False ; |
15 | XMLDocument . load(XMLFile); |
16 | XMLRoot := XMLDocument . documentElement; |
17 | except |
18 | RaiseException(ExpandConstant( '{cm:LOADXMLFAILED}' )); |
19 | end ; |
20 | end ; |
21 |
22 |
23 | { ================================================================ |
24 | 功能: 在打开的XML文档中, 查找指定的节点 |
25 | 参数: XMLNode 使用OpenXML打开的XML文档的节点 |
26 | Key 节点名字 |
27 | AttrName 节点属性名, 可以为空 |
28 | AttrValue 节点属性值, 可以为空 |
29 | FoundNode 找到的节点 |
30 | 返回: 成功返回True 否则返回False |
31 | } |
32 | function FindXMLNodeByKey(XMLNode: Variant; KeyName: String ; AttrName: String ; AttrVal: String ; var FoundNode: Variant) : Boolean ; |
33 | var |
34 | NodeIndex: Integer ; |
35 | Node: Variant; |
36 | begin |
37 | Result := False ; |
38 | try |
39 | if '' = AttrName then begin |
40 | FoundNode := XMLNode . selectSingleNode(KeyName) |
41 | Result := True ; |
42 | end else |
43 | for NodeIndex := 0 to XMLNode . childNodes . length()- 1 do begin |
44 | Node := XMLNode . childNodes . item(NodeIndex); |
45 | if (KeyName = Node . nodeName) and ( AttrVal = Node . Attributes . GetNamedItem(AttrName).value) then begin |
46 | FoundNode := XMLNode . childNodes . item(NodeIndex); |
47 | Result := True ; |
48 | break; |
49 | end ; |
50 | end ; |
51 | except |
52 | Result := False ; |
53 | end ; |
54 | end ; |
55 |
56 |
57 | { ================================================================ |
58 | 功能: 获取子节点的值 |
59 | 参数: XMLNode 使用OpenXML打开的XML文档的节点 |
60 | Key 节点名字 |
61 | 返回: 值, 获取失败时, 返回空 |
62 | } |
63 | function GetXMLValue(XMLNode: Variant; KeyName: String ) : String ; |
64 | begin |
65 | try |
66 | Result := XMLNode . selectSingleNode(KeyName).text; |
67 | except |
68 | RaiseException(ExpandConstant( '{cm:READXMLFAILED}' )); |
69 | end ; |
70 | end ; |