InstallAnywhere .iap_xml 쿼리 패턴은(는) 무엇을 하나요?
<when_to_use>
.iap_xml 파일로 작업할 때 이 스킬을 로드하세요 — 설치 액션 감사, 파일 복사 작업 나열, 변수 검색, 플랫폼별 분기 찾기, 또는 두 설치 변형(예: RA vs NON_RA 빌드) 비교.
</when_to_use>
운영 제약 사항
- 항상
-i xml을 명시적으로 전달하세요 —.iap_xml확장자에서는 자동 감지가 실패합니다. - 모든 중간 결과는
/tmp/에 기록하세요 — 소스 트리에는 절대 기록하지 마세요. - 파일은 2.5–2.6MB, 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")'
# 모든 액션 요소 개수 세기
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 vs NON_RA, Windows vs 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"))'