네이티브 XFA exData XML

일반 이벤트 호스트는 없는 exData 값 프로퍼티를 만들고 실제 외부 XML 자식을 네이티브 폼 occurrence로 임포트합니다. XHTML draw 콘텐츠는 네이티브 XDP 저장과 다시 읽기를 거친 뒤 리치 텍스트 PDF 소비자에 도달합니다

XML 임포트와 읽기

const content = row.label.value.exData;
content.contentType = "text/html";
content.loadXML(
  '<body xmlns="http://www.w3.org/1999/xhtml">' +
  '<p><span style="font-size:18pt;color:#0000FF">Changed</span></p>' +
  '</body>',
  false,
  true
);
const currentXML = content.saveXML();
const readableXML = content.saveXML("pretty");

loadXML(source, ignoreRoot=true, overwrite=false)는 잘 구성된 XML 문서 문자열을 받고 undefined를 반환합니다. ignoreRoot는 묶는 루트의 자식들을 덧붙이고, false는 루트 자체를 덧붙입니다

overwrite는 임포트 전에 기존 콘텐츠를 교체합니다. 기본값 false는 문서 순서대로 콘텐츠를 덧붙이며 이전에 임포트한 자식을 유지합니다

saveXML()은 현재 exData 요소와 콘텐츠를 UTF-8 XML 선언과 프래그먼트 문자열로 반환합니다. 선택적 literal pretty는 섞인 텍스트와 CDATA 공백을 유지하면서 요소만 있는 콘텐츠에 들여쓰기를 넣습니다

임포트된 요소 이름, 네임스페이스 선언, 네임스페이스 한정 속성, literal Unicode, 문자 참조, 섞인 텍스트와 CDATA는 네이티브 XML로 남습니다. 마크업이 평범한 rawValue 문자열로 저장되지는 않습니다

생성과 기본값

Value 프로퍼티는 exData 자식 하나를 허용하며 다른 값 선택과 상호 배타적입니다. 없는 draw 값과 exData 자식은 같은 이벤트에서 만들고 임포트할 수 있습니다

exData는 maxLength=-1, transferEncoding=none이 기본이고 contentType, href, id, name, rid, use, usehref 속성은 비어 있습니다

이벤트 호스트는 exData에 스칼라 값 접근자를 노출하지 않습니다. 외부 XML 콘텐츠에는 loadXML과 saveXML을 쓰세요

즉시 읽기, 식별자와 트랜잭션

순수 네이티브 XML 연산은 스크립트 실행이 계속되기 전에 각 요청을 검증하고 직렬화합니다. 잘못된 XML은 스크립트 안에서 throw되며 try/catch로 처리할 수 있고 현재 콘텐츠는 바뀌지 않습니다

결정론적 응답 리플레이는 기존 스크립트 트랜잭션을 공유하고 UI, 파일, 네트워크, 전송 부수 효과를 일으키지 않습니다

이후 saveXML 호출은 같은 이벤트에서 앞선 성공한 임포트와 현재 exData 속성을 봅니다. 유지된 참조는 이후 이벤트에서 현재 노드 식별자로 해석됩니다

네이티브 콘텐츠는 대상이 된 반복 occurrence에만 들어가고, 새 occurrence는 기존 occurrence의 임포트 재정의를 복사하는 대신 템플릿 XML로 초기화됩니다

overwrite=true로 임포트한 빈 루트는 실제 콘텐츠를 비우고 저장과 다시 읽기 후에도 빈 채로 남습니다. 템플릿 콘텐츠로 되돌아가지 않습니다

처리되지 않은 스크립트 오류와 네이티브 발행 실패는 정확한 네이티브 XDP 바이트를 복원합니다. 앞선 평범한 field 쓰기와 XML 변경도 포함입니다

예산과 저장 소비

스크립트 한도는 XML 입출력 바이트, 네이티브 요소·텍스트 노드, 깊이, 연산, 경과 시간, 리플레이 응답을 묶습니다. 위젯 MaxValueChars도 발행되는 XML 값을 제한합니다

FPC 브리지는 XML 응답과 평범한 액션 값에서 UTF-8 바이트를 유지합니다. 악센트 문자와 보충 Unicode도 포함입니다

저장된 XHTML draw 콘텐츠는 기존 리치 텍스트 소비자의 폰트, 크기, 색, 인라인 CSS 동작을 씁니다. 독립 PDF 리더가 첫 인스턴스 텍스트, 교체 스타일, 새 인스턴스 콘텐츠, 명시적 비우기를 검증합니다

남은 XML 통합 과제

이번 배포는 exData 콘텐츠 연산을 구현합니다. 다른 nodeclass의 loadXML/saveXML 메서드, Data DOM 구조 임포트, 일반 외부 노드 변경은 별도 과제로 남아 있습니다

DTD 선언과 사용자 정의 엔티티 카탈로그는 아직 구현되지 않았습니다. 사전 정의 엔티티와 10진·16진 문자 참조는 지원됩니다

요소 안의 주석과 처리 명령은 임포트, 즉시 읽기, 저장, 다시 읽기, 롤백 전 과정에서 네이티브로 유지됩니다. 루트 밖의 문서 수준 마크업과 완전한 XML 렉시컬 왕복은 별도 과제로 남아 있습니다

외부 href 해석, 인코딩된 exData 전송, maxLength 강제, 외부 미디어 소비자, Unicode 리치 위젯 외관은 별도 구현 과제로 남아 있습니다

참고 자료와 관련 API

임포트 루트와 교체 의미론은 Adobe XFA Element API를, XML 이름·참조·공백은 XML 1.0을 따릅니다

TXFAEventBinding, TXFAEventActionKind, 리치 텍스트 프로퍼티, 인터랙티브 XFA 런타임을 참고하세요