InstallAnywhere .iap_xml 查询模式
<when_to_use>
处理任何 .iap_xml 文件时加载此技能——审计安装操作、列出文件复制操作、发现变量、查找特定平台分支,或比较两个安装程序变体(例如,RA 与 NON_RA 构建)。
</when_to_use>
操作约束
- 始终显式传递
-i xml——自动检测在.iap_xml扩展名上会失败 - 将所有中间结果写入
/tmp/——切勿写入源目录树 - 文件大小为 2.5–2.6 MB,超过 65,000 行——使用结构化 dasel 查询,切勿将文件读入上下文
根结构
InstallAnywhere .iap_xml 文件具有固定的根路径:InstallAnywhere.project。
# 文档根目录下的顶级元素名称
cat installer.iap_xml | dasel -i xml 'keys($this)'
# 导航到安装操作序列
cat installer.iap_xml | dasel -i xml 'InstallAnywhere.project.installSequence'
# 项目节点的子元素
cat installer.iap_xml | dasel -i xml 'InstallAnywhere.project.keys($this)'
递归下降——无需知道完整路径即可在任何深度查找元素:
# 任意深度下所有名为 "action" 的元素
cat installer.iap_xml | dasel -i xml '..action'
# 任意深度下所有名为 "panel" 的元素
cat installer.iap_xml | dasel -i xml '..panel'
# 任意深度下存在特定属性的任何节点
cat installer.iap_xml | dasel -i xml 'search(has("-name"))'
..elementName 递归下降。search(predicate) 在任何深度匹配节点。
操作序列分析
# 按执行顺序的所有操作名称
cat installer.iap_xml | dasel -i xml '..action.map("-name")'
# 所有操作类型
cat installer.iap_xml | dasel -i xml '..action.map("-type")'
# 统计所有 action 元素的数量
cat installer.iap_xml | dasel -i xml 'len(..action)'
# 写入文件以供分析
cat installer.iap_xml | dasel -i xml '..action.map("-name")' > /tmp/action_names.txt
cat installer.iap_xml | dasel -i xml '..action.map("-type")' > /tmp/action_types.txt
变量发现
# 所有变量定义
cat installer.iap_xml | dasel -i xml '..variable.map("-name")' > /tmp/installer_vars.txt
平台条件
# 所有平台条件(Windows 与 Linux 分支)
cat installer.iap_xml | dasel -i xml 'search(has("-platform")).map("-platform")' > /tmp/platforms.txt
跨变体比较
比较同一安装程序的两个构建(例如,RA 与 NON_RA,Windows 与 Linux 变体)时:
# 比较两个安装程序文件之间的操作集合
cat installer_a.iap_xml | dasel -i xml '..action.map("-name")' | sort > /tmp/actions_a.txt
cat installer_b.iap_xml | dasel -i xml '..action.map("-name")' | sort > /tmp/actions_b.txt
diff /tmp/actions_a.txt /tmp/actions_b.txt > /tmp/installer_diff.txt
# 比较面板集合
cat installer_a.iap_xml | dasel -i xml '..panel.map("-name")' | sort > /tmp/panels_a.txt
cat installer_b.iap_xml | dasel -i xml '..panel.map("-name")' | sort > /tmp/panels_b.txt
diff /tmp/panels_a.txt /tmp/panels_b.txt
文件复制操作
# 所有文件复制源
cat installer.iap_xml | dasel -i xml '..installFile.map("-source")' > /tmp/file_copies.txt
面板导航
# 面板名称和数量
cat installer.iap_xml | dasel -i xml '..panel.map("-name")'
cat installer.iap_xml | dasel -i xml 'len(..panel)'
属性语法参考
在 dasel 友好模式下,XML 属性使用 - 前缀:
# 访问第一个匹配项上的特定属性
cat installer.iap_xml | dasel -i xml '..action[0].-name'
# 发现节点的属性和子元素
cat installer.iap_xml | dasel -i xml '..action[0].keys($this)'
# 提取所有匹配节点上的属性值
cat installer.iap_xml | dasel -i xml '..elementName.map("-attributeName")'
# 统计匹配元素的数量
cat installer.iap_xml | dasel -i xml 'len(..elementName)'
# 在任意深度使用属性谓词进行搜索
cat installer.iap_xml | dasel -i xml 'search(has("-attributeName"))'