NSIS_XML_插件中文帮助文档

发布时间 2023-11-27 21:16:57作者: 水晶石

 

XML NSIS 插件 v2.0

2008 年 Shengalts Aleksander,网名 Instructor (Shengalts@mail.ru)

目录

  1. 使用说明
  2. 插件特性
  3. 特殊字符
  4. XML文件示例
  5. 插件函数
 
文件格式
  ${xml::SetCondenseWhiteSpace} "[1|0]"
  ${xml::SetEncoding} "[encoding]"
 
文档文件
  ${xml::LoadFile} "[file]" $var
  ${xml::SaveFile} "[file]" $var
 
声明节点
  ${xml::DeclarationVersion} $var1 $var2
  ${xml::DeclarationEncoding} $var1 $var2
  ${xml::DeclarationStandalone} $var1 $var2
 
文本节点
  ${xml::GetText} $var1 $var2
  ${xml::SetText} "[value]" $var
  ${xml::SetCDATA} "[0|1]" $var
  ${xml::IsCDATA} $var
 
节点值
  ${xml::GetNodeValue} $var
 

${xml::SetNodeValue} "[value]"

 


分级搜索

  ${xml::FindNextElement} "[name]" $var1 $var2
  ${xml::FindCloseElement}
 
分级移动
  ${xml::RootElement} $var1 $var2
  ${xml::FirstChildElement} "[name]" $var1 $var2
  ${xml::FirstChild} "[name]" $var1 $var2
  ${xml::LastChild} "[name]" $var1 $var2
  ${xml::Parent} $var1 $var2
  ${xml::NoChildren} $var
 
同级移动
  ${xml::NextSiblingElement} "[name]" $var1 $var2
  ${xml::NextSibling} "[name]" $var1 $var2
  ${xml::PreviousSibling} "[name]" $var1 $var2
 
层级修改
  ${xml::InsertAfterNode} "[handle]" $var
  ${xml::InsertBeforeNode} "[handle]" $var
  ${xml::InsertEndChild} "[handle]" $var
  ${xml::ReplaceNode} "[handle]" $var
  ${xml::RemoveNode} $var
  ${xml::RemoveAllChild}
 
节点与内存
  ${xml::CreateText} "[text]" $var
  ${xml::CreateNode} "<a>text</a>" $var
  ${xml::CloneNode} $var
  ${xml::FreeNode} "[handle]" $var
 
XPath
  ${xml::XPathString} "[expression]" $var1 $var2
  ${xml::XPathNode} "[expression]" $var
  ${xml::XPathAttribute} "[expression]" $var
 
其他节点功能
  ${xml::NodeHandle} $var
  ${xml::GotoHandle} "[handle]" $var
  ${xml::ElementPath} $var
  ${xml::GotoPath} "[path]" $var
  ${xml::NodeType} $var
  ${xml::Coordinate} $var1 $var2 $var3
 
属性
  ${xml::GetAttribute} "[name]" $var1 $var2
  ${xml::SetAttribute} "[name]" "[value]" $var
  ${xml::RemoveAttribute} "[name]" $var
  ${xml::FirstAttribute} $var1 $var2 $var3
  ${xml::LastAttribute} $var1 $var2 $var3
  ${xml::NextAttribute} $var1 $var2 $var3
  ${xml::PreviousAttribute} $var1 $var2 $var3
  ${xml::CurrentAttribute} $var1 $var2 $var3
  ${xml::SetAttributeName} "[name]"
  ${xml::SetAttributeValue} "[value]"
 
卸载插件
  ${xml::Unload}

 


 

使用说明

XML 插件解析 XML 文档,并从中构建一个可读取、修改和保存的文档对象模型(DOM)。XML 插件及其文档基于 TinyXml (2.5.3) 和 TinyXPath (1.3.1).

插件特性

- 读取/修改 XML 文件。
- 支持 XPath 表达式。
- Unicode UTF-8 支持。
- 独立于 "MSXML.DLL"。
- 支持压缩和非压缩空格。
- 行和列跟踪。

特殊字符

插件识别预定义的 "字符实体",即特殊字符。具体包括:

&amp; & &lt; < &gt; > &quot; " &apos; '

当读取 XML 文档时,将识别这些实体,并将它们翻译成它们的 UTF-8 编码。例如,具有以下 XML 的文本:

Far &amp; Away

在查询时将具有值 "Far & Away",并且在写回到 XML 文件时将作为一个 ampersand(&)写回。此外,任何字符都可以通过其 Unicode 代码点进行指定:语法(& #xA0) " " 或(& #160;) " " 都表示非断行空格字符。

XML文件示例

<?xml version="1.0" encoding="utf-8" standalone="no"?> <!-- COMMENT1 --> <ELEMENT> <ELEMENT2>TEXT</ELEMENT2> <!-- COMMENT2 --> <empty_ELEMENT /> <empty_ELEMENT2 NAME="VALUE" NAME2="VALUE2" /> </ELEMENT>
声明:
根:
节点:
文本:
注释:
属性:
子节点:
父节点:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<ELEMENT>
是 ELEMENT, TEXT, COMMENT, DECLARATION
TEXT
COMMENT1 和 COMMENT2
NAME="VALUE" 与 NAME2="VALUE2"
ELEMENT2 是 ELEMENT 的子节点;
ELEMEN 是 ELEMENT2 的父节点


插件函数

${xml::SetCondenseWhiteSpace} "[1|0]"
将所有空白字符压缩为单个空格或不压缩。
"[1|0]"
"1"
"0"

-将所有空白字符压缩为单个空格(默认设置)。
-不压缩所有空白字符。

${xml::SetEncoding} "[encoding]"
设置文档编码。
"[encoding]"
""
"UTF8"
"LEGACY"

-自动检测编码,使用 UTF-8 或 ANSI(默认)
-强制使用 Unicode UTF-8 编码
-强制使用 ANSI 编码

${xml::LoadFile} "[file]" $var
加载文档.
"[file]"
- 加载该文件
$var
"0" 成功
"-1" 出现错误

${xml::SaveFile} "[file]" $var
保存文档.
"[file]"
- 保存此文件,如果为空,则保存当前加载的文件。
$var
"0" 成功
"-1" 出现错误

${xml::DeclarationVersion} $var1 $var2
返回声明节点的 Version 属性的值.
$var1
Version (例如 "1.0")
$var2
"0" 成功
"-1" 出现错误

${xml::DeclarationEncoding} $var1 $var2
返回声明节点的编码属性的值。
$var1
编码属性 (例如 "utf-8")
$var2
"0" 成功
"-1" 出现错误

${xml::DeclarationStandalone} $var1 $var2
返回声明节点的独立属性的值。
$var1
独立属性 (例如 "yes")
$var2
"0" 成功
"-1" 出现错误

${xml::GetText} $var1 $var2
便捷函数,方便访问当前元素内的文本.
$var1
元素文本
$var2
"0" 成功
"-1" 出现错误

${xml::SetText} "[value]" $var
便捷函数,方便设置当前元素的文本.
"[value]"
- 要设置的文本
$var
"0" 成功
"-1" 出现错误

${xml::SetCDATA} "[0|1]" $var
打开或关闭当前元素文本的 CDATA 表示.
"[0|1]"
"0" - 关闭(默认)
"1" - 打开
$var
"0" 成功
"-1" 出现错误

${xml::IsCDATA} $var
查询是否使用 CDATA 区段表示此文本.
$var
"1" 当前节点使用 CDATA
"0" 未使用 CDATA
"-1" 当前节点不是文本

${xml::GetNodeValue} $var
获取当前节点的值
$var
节点值

${xml::SetNodeValue} "[value]"
设置当前节点的值.
"[value]"
- 设置此值

${xml::FindNextElement} "[name]" $var1 $var2
搜索元素(递归),返回元素名称并跳转到该元素.
"[name]"
- 由名称指定的元素,如果为空则返回所有找到的元素
$var1
名称
$var2
"0" 成功
"-1" 出现错误

${xml::FindCloseElement}
关闭由 xml::FindNextElement 打开的搜索


${xml::RootElement} $var1 $var2
返回根元素的名称并跳转到该元素.
$var1
根元素的名称 (唯一的顶级元素)
$var2
"0" 成功
"-1" 出现错误

${xml::FirstChildElement} "[name]" $var1 $var2
返回第一个子元素名称并转到该子元素.
"[name]"
- 查找由名称指定的第一个子元素,如果为空则返回第一个找到的元素
$var1
名称
$var2
"0" 成功
"-1" 出现错误

${xml::FirstChild} "[name]" $var1 $var2
返回第一个子节点名称并转到该名称.
"[name]"
- 查找由名称指定的第一个子节点,如果为空则返回第一个找到的节点
$var1
名称
$var2
"0" 成功
"-1" 出现错误

${xml::LastChild} "[name]" $var1 $var2
返回最后一个子节点名称并转到该名称.
"[name]"
- 查找由名称指定的最后一个子节点,如果为空则返回最先找到的
$var1
名称
$var2
"0" 成功
"-1" 出现错误

${xml::Parent} $var1 $var2
返回父元素名称并转到该名称。
$var1
名称
$var2
"0" 成功
"-1" 出现错误

${xml::NoChildren} $var
检查当前节点是否有子节点.
$var
"1" 当前节点没有子节点
"0"当前节点有子节点

${xml::NextSiblingElement} "[name]" $var1 $var2
返回下一个同级元素名称并转到它.
"[name]"
- 查找由名称指定的下一个同级元素,如果为空则返回第一个找到的元素
$var1
名称
$var2
"0" 成功
"-1" 出现错误

${xml::NextSibling} "[name]" $var1 $var2
返回下一个同级节点名称并转到它.
"[name]"
- 查找由名称指定的下一个同级节点,如果为空则返回第一个找到的节点
$var1
名称
$var2
"0" 成功
"-1" 出现错误

${xml::PreviousSibling} "[name]" $var1 $var2
返回上一个同级节点名称并转到该名称.
"[name]"
- 查找由名称指定的前一个同级节点,如果为空则返回第一个找到的节点
$var1
名称
$var2
"0" 成功
"-1" 错误

${xml::InsertAfterNode} "[handle]" $var
在当前节点后添加新节点并跳转到该新节点.
"[handle]"
- 插入此节点
(句柄由 xml::NodeHandle, xml::CreateText, xml::CreateNode, xml::CloneNode 返回)
$var
"0" 成功
"-1" 错误

${xml::InsertBeforeNode} "[handle]" $var
在当前节点之前添加新节点并转到该节点.
"[handle]"
- 插入该节点
(句柄由 xml::NodeHandle, xml::CreateText, xml::CreateNode, xml::CloneNode 返回)
$var
"0" 成功
"-1" 错误

${xml::InsertEndChild} "[handle]" $var
将新节点添加到当前节点子节点的末尾并转到它.
"[handle]"
- Insert this node
(句柄由 xml::NodeHandle, xml::CreateText, xml::CreateNode, xml::CloneNode 返回)
$var
"0" 成功
"-1" 错误

${xml::ReplaceNode} "[handle]" $var
替换当前节点.
"[handle]"
- 替换为此节点
(句柄由 xml::NodeHandle, xml::CreateText, xml::CreateNode, xml::CloneNode 返回)
$var
"0" 成功
"-1" 错误

${xml::RemoveNode} $var
删除当前节点并转到父元素.
$var
"0" 成功
"-1" 错误

${xml::RemoveAllChild}
删除当前节点的所有子节点 (使其为空).


${xml::CreateText} "[text]" $var
在内存中创建文本节点并返回其句柄.
"[text]"
- 在内存中创建此文本
$var
文本节点的句柄
"0" 错误

${xml::CreateNode} "[text]" $var
在内存中创建节点并返回其句柄.
"[text]"
- 在内存中创建此节点
$var
节点句柄
"0" 错误

${xml::CloneNode} $var
将当前节点复制到内存并返回其句柄.
$var
节点句柄
"0" 错误

${xml::FreeNode} "[handle]" $var
从节点释放内存.
"[handle]"
- Free this node
(句柄由 xml::CreateText, xml::CreateNode, xml::CloneNode 返回)
$var
"0" 成功
"-1" 错误

${xml::XPathString} "[expression]" $var1 $var2
计算一个字符串 XPath 表达式.
"[expression]"
- XPath 表达式 (例如 "count(//@*)")
$var1
结果字符串
$var2
"0" 成功
"-1" 错误

${xml::XPathNode} "[expression]" $var
计算节点 XPath 表达式并跳转到该节点.
"[expression]"
- XPath表达式 (例如 "/a/b")
$var
"0" 成功
"-1" 错误

${xml::XPathAttribute} "[expression]" $var
计算属性的 XPath 表达式并跳转到该属性.
"[expression]"
- XPath 属性 (例如 "/a/b/@attr")
$var
"0" 成功
"-1" 错误

${xml::NodeHandle} $var
返回当前节点句柄.
$var
当前节点句柄
"0" 错误

${xml::GotoHandle} "[handle]" $var
转到指定的节点.
"[handle]"
- Go to this node
(句柄由 xml::NodeHandle 返回)
$var
"0" 成功
"-1" 错误

${xml::ElementPath} $var
返回当前元素路径.
$var
当前元素路径 (例如 "/a/b/c[3]/d")

${xml::GotoPath} "[path]" $var
跳转到指定的路径.
"[path]"
- 跳转到此路径(例如,从根路径 "/a/b[2]/c/d",从当前元素 "a/b[2]/c/d",使用最后一个元素 'b' "a/b[-1]/c/d",使用任意最后一个元素 "a/[-1]/c/d",跳转到文档开头 "")
$var
"0" 成功
"-1" 错误

${xml::NodeType} $var
返回当前节点的类型.
$var
"ELEMENT"
"COMMENT"
"DOCUMENT"
"TEXT"
"DECLARATION"
"UNKNOWN"

${xml::Coordinate} $var1 $var2 $var3
返回文本中的当前节点坐标.
$var1
Row
$var2
Column
$var3
"0" 成功
"-1" 错误

${xml::GetAttribute} "[name]" $var1 $var2
返回当前元素的属性值并转到该属性.
"[name]"
- 查找由名称指定的属性
$var1
属性值
$var2
"0" 成功
"-1" 错误

${xml::SetAttribute} "[name]" "[value]" $var
设置当前元素的属性.
"[name]"
- 属性名称
"[value]"
- 属性值
$var
"0" 成功
"-1" 错误

${xml::RemoveAttribute} "[name]" $var
删除当前元素具有指定名称的属性.
"[name]"
- 属性名称
$var
"0" 成功
"-1" 错误

${xml::FirstAttribute} $var1 $var2 $var3
返回当前元素的第一个属性的名称和值,并跳转到该属性.
$var1
属性名称
$var2
属性值
$var3
"0" 成功
"-1" 错误

${xml::LastAttribute} $var1 $var2 $var3
返回当前元素的最后一个属性的名称和值,并跳转到该属性.
$var1
属性名称
$var2
属性值
$var3
"0" 成功
"-1" 错误

${xml::NextAttribute} $var1 $var2 $var3
返回下一个属性的名称和值并跳转到该属性.
$var1
属性名称
$var2
属性值
$var3
"0" 成功
"-1" 错误

${xml::PreviousAttribute} $var1 $var2 $var3
返回前一个属性的名称和值,并跳转到该属性.
$var1
属性名称
$var2
属性值
$var3
"0" 成功
"-1" 错误

${xml::CurrentAttribute} $var1 $var2 $var3
返回当前属性的名称和值.
$var1
属性名称
$var2
属性值
$var3
"0" 成功
"-1" 错误

${xml::SetAttributeName} "[name]"
设置当前属性的名称.
"[name]"
- 属性名称

${xml::SetAttributeValue} "[value]"
设置当前属性的值.
"[value]"
- 属性值

${xml::Unload}
卸载插件.