InstallAnywhere .iap_xml Abfragemuster
<when_to_use>
Laden Sie diesen Skill, wenn Sie mit einer .iap_xml-Datei arbeiten – zum Prüfen von Installationsaktionen, Auflisten von Dateikopiervorgängen, Entdecken von Variablen, Finden plattformspezifischer Verzweigungen oder Vergleichen zweier Installationsvarianten (z. B. RA vs. NON_RA-Builds).
</when_to_use>
Betriebliche Einschränkungen
- Übergeben Sie immer explizit
-i xml– die automatische Erkennung schlägt bei.iap_xml-Erweiterungen fehl - Schreiben Sie alle Zwischenergebnisse nach
/tmp/– niemals in den Quellbaum - Dateien sind 2,5–2,6 MB groß, 65.000+ Zeilen – verwenden Sie strukturelle Dasel-Abfragen, lesen Sie die Datei niemals vollständig in den Kontext
Root-Struktur
InstallAnywhere .iap_xml-Dateien haben einen festen Root-Pfad: InstallAnywhere.project.
# Namen der Elemente der obersten Ebene im Dokument-Root
cat installer.iap_xml | dasel -i xml 'keys($this)'
# Navigieren zur Installationsaktionssequenz
cat installer.iap_xml | dasel -i xml 'InstallAnywhere.project.installSequence'
# Kinder des Projektknotens
cat installer.iap_xml | dasel -i xml 'InstallAnywhere.project.keys($this)'
Rekursiver Abstieg – findet Elemente in beliebiger Tiefe, ohne den vollständigen Pfad zu kennen:
# Alle Elemente namens "action" in beliebiger Tiefe
cat installer.iap_xml | dasel -i xml '..action'
# Alle Elemente namens "panel" in beliebiger Tiefe
cat installer.iap_xml | dasel -i xml '..panel'
# Jeder Knoten in beliebiger Tiefe, bei dem ein bestimmtes Attribut existiert
cat installer.iap_xml | dasel -i xml 'search(has("-name"))'
..elementName steigt rekursiv ab. search(predicate) findet Knoten in beliebiger Tiefe.
Aktionssequenzanalyse
# Alle Aktionsnamen in Ausführungsreihenfolge
cat installer.iap_xml | dasel -i xml '..action.map("-name")'
# Alle Aktionstypen
cat installer.iap_xml | dasel -i xml '..action.map("-type")'
# Anzahl aller Aktionselemente
cat installer.iap_xml | dasel -i xml 'len(..action)'
# Zur Analyse schreiben
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
Variablenentdeckung
# Alle Variablendefinitionen
cat installer.iap_xml | dasel -i xml '..variable.map("-name")' > /tmp/installer_vars.txt
Plattformbedingungen
# Alle Plattformbedingungen (Windows vs Linux-Verzweigungen)
cat installer.iap_xml | dasel -i xml 'search(has("-platform")).map("-platform")' > /tmp/platforms.txt
Variantenübergreifender Vergleich
Beim Vergleichen zweier Builds desselben Installers (z. B. RA vs. NON_RA, Windows vs. Linux-Variante):
# Aktionssätze zwischen zwei Installer-Dateien vergleichen
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
# Panelsätze vergleichen
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
Dateikopiervorgänge
# Alle Dateikopierquellen
cat installer.iap_xml | dasel -i xml '..installFile.map("-source")' > /tmp/file_copies.txt
Panel-Navigation
# Panelnamen und -anzahl
cat installer.iap_xml | dasel -i xml '..panel.map("-name")'
cat installer.iap_xml | dasel -i xml 'len(..panel)'
Attribut-Syntax-Referenz
XML-Attribute verwenden das --Präfix im Dasel-Freundlich-Modus:
# Zugriff auf ein bestimmtes Attribut beim ersten Treffer
cat installer.iap_xml | dasel -i xml '..action[0].-name'
# Attribute und Kinder eines Knotens entdecken
cat installer.iap_xml | dasel -i xml '..action[0].keys($this)'
# Attributwerte über alle passenden Knoten extrahieren
cat installer.iap_xml | dasel -i xml '..elementName.map("-attributeName")'
# Zählen passender Elemente
cat installer.iap_xml | dasel -i xml 'len(..elementName)'
# Suche mit Attributprädikat in beliebiger Tiefe
cat installer.iap_xml | dasel -i xml 'search(has("-attributeName"))'