.NET에서 XML 처리 작업하기

.NET에서 XML 처리 작업하기

XLSX 파일은 OPC ZIP 패키지 내부의 XML 파트에 데이터를 저장합니다. Aspose.Cells FOSS for .NET은 이를 네 개의 XML 매퍼 클래스: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, StylesheetXmlMapper를 통해 처리합니다. 이러한 클래스를 이해하면 구문 분석 실패를 진단하고 내결함성 로딩을 올바르게 구성할 수 있습니다. dotnet add package Aspose.Cells_FOSS으로 설치하십시오.

단계별 가이드

1단계: 패키지 설치

dotnet add package Aspose.Cells_FOSS

2단계: 네임스페이스 가져오기

using Aspose.Cells_FOSS;

3단계: XML 매퍼 책임 이해

각 매퍼는 XLSX 구조의 하나의 XML 파트를 처리합니다:

매퍼XML 파트처리 항목
WorkbookXmlMapperxl/workbook.xml워크북 메타데이터, 시트 목록, 정의된 이름
WorksheetXmlMapperxl/worksheets/sheetN.xml셀 데이터, 수식, 하이퍼링크, 검증, 조건부 서식
SharedStringTableXmlMapperxl/sharedStrings.xml중복 제거된 문자열 값
StylesheetXmlMapperxl/styles.xml셀 스타일, 글꼴, 채우기, 테두리

이 매퍼들은 Workbook 구축 및 Save() 중에 자동으로 호출됩니다. 애플리케이션 코드에서 직접 인스턴스화하지 않습니다.


단계 4: XmlParsingException 처리

XmlParsingException은 매퍼가 복구할 수 없는 잘못된 XML을 만나면 발생합니다. 매퍼의 내결함 파싱 경로를 활성화하려면 LoadOptions에서 TryRepairXml = true를 활성화하십시오.

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)");

    var diag = wb.LoadDiagnostics;
    if (diag.HasRepairs)
        Console.WriteLine("XML repairs applied. Data loss risk: " + diag.HasDataLossRisk);
}
catch (XmlParsingException ex)
{
    Console.WriteLine("Unrecoverable XML error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Load failed: " + ex.Message);
}

5단계: LoadDiagnostics를 사용하여 XML 문제 식별

로드가 성공적으로 완료된 후, 적용된 XML 복구와 데이터 손실이 발생했는지 확인하려면 LoadDiagnostics.Issues에서 DiagnosticEntry 레코드를 확인하십시오.

using Aspose.Cells_FOSS;

var opts = new LoadOptions { TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;

foreach (var entry in diag.Issues)
{
    Console.WriteLine($"[{entry.Severity}] {entry.Code}");
    Console.WriteLine($"  Message: {entry.Message}");
    Console.WriteLine($"  RepairApplied: {entry.RepairApplied}  DataLossRisk: {entry.DataLossRisk}");
}

일반적인 문제 및 해결책

XmlParsingException 조차도 TryRepairXml = true. XML이 너무 잘못 형성되어 내결함 파서가 복구할 수 없습니다. 비표준 도구가 생성한 파일에서 구문적으로 잘못된 XML을 만들 경우 이런 일이 발생할 수 있습니다. 이러한 파일에 대한 복구 경로가 없습니다.

로드 후 스타일이 누락되었습니다.
StylesheetXmlMapper에서 손상된 xl/styles.xml가 발생했을 수 있습니다. 스타일과 관련된 코드를 포함한 항목은 LoadDiagnostics.Issues에서 확인하고, 영향을 받은 셀은 DataLossRisk = true에서 확인하십시오.

공유 문자열이 빈 셀로 표시됩니다.
손상된 xl/sharedStrings.xml은 공유 문자열 테이블을 참조하는 셀을 빈 셀로 렌더링하게 할 수 있습니다. 복구를 시도하려면 TryRepairXml을 활성화하십시오.

자주 묻는 질문

맞춤 XML 매퍼를 구현할 수 있나요?

아니요. XML 매퍼 클래스는 sealed 내부 인프라이며 확장을 위해 설계되지 않았습니다.

SharedStringTableXmlMapper가 별도인가요?

OOXML 사양은 파일 크기를 줄이기 위해 반복되는 문자열 값을 공유 문자열 테이블로 분리합니다. 매퍼는 셀 데이터와 별도로 이 테이블을 읽고 쓰는 작업을 처리합니다.

TryRepairXml가 모든 XML 파싱 문제를 해결합니까?

TryRepairXml은 닫히지 않은 요소, 누락된 네임스페이스, 잘린 속성 값과 같은 복구 가능한 오류를 처리합니다. 구조적으로는 유효하지만 의미적으로 일관되지 않은 XML(예: 존재하지 않는 셀을 참조하는 수식 토큰)은 오류 없이 계속 파싱됩니다.

관련 항목

 한국어