InstallAnywhere .iap_xml クエリパターン
<when_to_use>
このスキルは、.iap_xml ファイルを扱う際にロードしてください — インストールアクションの監査、ファイルコピー操作の一覧表示、変数の発見、プラットフォーム固有の分岐の検索、または 2 つのインストーラバリアント(例: 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
クロスバリアント比較
同じインストーラの 2 つのビルド(例: RA vs NON_RA、Windows バリアント vs Linux バリアント)を比較する場合:
# 2 つのインストーラファイル間でアクションセットを比較
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"))'