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 vs 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"))'