XML 프로세싱 사용하기
XML 처리 작업
XLSX 파일은 OPC 패키지 내부의 XML 파트에 데이터를 저장합니다. Aspose.Cells .NET용 FOSS는 XML 파싱 및 직렬화 계층을 네 개의 매퍼 클래스: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, StylesheetXmlMapper을 통해 노출합니다. 각 매퍼는 해당 XML 파트에 대해 Read와 Write 작업을 모두 구현합니다. 이것들은 내부 인프라 API이며 — 대부분의 애플리케이션 코드는 Workbook와 Worksheet 객체를 통해 완전히 작동합니다.
XML 매퍼 클래스
각 XML 매퍼는 XLSX 구조의 XML 파트 하나를 담당합니다:
| Mapper | XML 부분 | Responsibility |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | 통합 문서 수준 메타데이터, 시트 참조, 정의된 이름 |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | 셀 데이터, 수식, 하이퍼링크, 조건부 서식, 데이터 유효성 검사 |
SharedStringTableXmlMapper | xl/sharedStrings.xml | 중복 제거된 문자열 값을 위한 공유 문자열 테이블 |
StylesheetXmlMapper | xl/styles.xml | 셀 스타일, 글꼴, 채우기, 테두리, 숫자 형식 |
각 매퍼는 두 개의 메서드 — Read와 Write — 를 제공하며, 이는 각각 라이브러리의 로드 및 저장 파이프라인에 의해 호출됩니다.
XmlParsingException
XmlParsingException은(는) 매퍼가 복구할 수 없는 손상된 XML을 만나면 발생합니다. 이 예외는 XML 파싱 중에 오류가 발생했을 때 오류 계층에서 WorkbookLoadException보다 먼저 발생합니다.
using Aspose.Cells_FOSS;
var opts = new LoadOptions
{
TryRepairPackage = true,
TryRepairXml = true,
};
try
{
var wb = new Workbook("malformed.xlsx", opts);
Console.WriteLine("Loaded: " + wb.Worksheets.Count + " sheet(s)");
}
catch (XmlParsingException ex)
{
Console.WriteLine("XML parse error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}팁 및 모범 사례
LoadOptions에TryRepairXml = true을 설정하여 매퍼의 내결함 파싱 경로를 활성화합니다.- 외부 시스템에서 생성될 수 있는 잘못된 XML를 포함하는 파일을 처리할 때
WorkbookLoadException외에도XmlParsingException을 잡습니다. - XML 매퍼 클래스는 애플리케이션 코드에서 인스턴스화하도록 설계되지 않았으며 —
Workbook생성 및Save()중에 자동으로 호출됩니다. - 진단을 위해 원시 XML 콘텐츠를 검사해야 하는 경우, XLSX를 ZIP로 추출하고 관련 XML 부분을 직접 확인하십시오.
일반적인 문제
| 문제 | 원인 | 수정 |
|---|---|---|
XmlParsingException 로드 시 | XLSX 파트 중 하나에 형식이 잘못된 XML | LoadOptions에 TryRepairXml = true를 설정합니다 |
| 라운드 트립 후 스타일이 누락되었습니다 | StylesheetXmlMapper이(가) 사용자 정의 스타일 레코드를 파싱하지 못했습니다 | 스타일 관련 복구 항목에 대해 LoadDiagnostics.Issues을(를) 확인하십시오 |
| 로드된 파일에 공유 문자열이 없습니다 | SharedStringTableXmlMapper이(가) 손상된 공유 문자열 테이블을 발견했습니다 | TryRepairXml을(를) 활성화하십시오; 원본 파일에 유효한 xl/sharedStrings.xml이 있는지 확인하십시오 |
FAQ
내가 직접 XML 매퍼를 구현할 수 있나요?
XML 매퍼 클래스는 봉인된 내부 인프라입니다. 현재 API 표면에서는 사용자 정의 매퍼가 지원되지 않습니다.
왜 별도의 SharedStringTableXmlMapper가 있나요?
OOXML 사양은 문자열 값을 공유 문자열 테이블(xl/sharedStrings.xml)로 분리하여 워크북 전체에서 반복되는 문자열을 중복 제거합니다. 매퍼는 이 테이블을 독립적으로 읽고 쓰는 작업을 처리합니다.
모든 XML 문제를 TryRepairXml = true가 해결합니까?
TryRepairXml는 닫히지 않은 요소, 누락된 네임스페이스, 잘린 값과 같은 복구 가능한 문제를 처리합니다. 구조적으로는 유효하지만 의미적으로 일관되지 않은 XML(예: 깨진 수식 참조)는 여전히 XmlParsingException를 일으킬 수 있습니다.
API Reference 요약
| 클래스 | 설명 |
|---|---|
WorkbookXmlMapper | 읽기/쓰기 xl/workbook.xml |
WorksheetXmlMapper | 읽기/쓰기 시트당 XML 파트 |
SharedStringTableXmlMapper | 읽기/쓰기 xl/sharedStrings.xml |
StylesheetXmlMapper | 읽기/쓰기 xl/styles.xml |
XmlParsingException | 복구 불가능한 XML 파싱 실패 시 발생합니다. |