C++에서 XML 처리 작업하기

C++에서 XML 처리 작업하기

Aspose.Cells FOSS for C++에는 Open XML 파트를 읽고 쓰는 데 내부적으로 사용되는 가벼운 XML 처리 레이어가 포함되어 있습니다. XmlDocument, XmlElement, 및 XmlAttribute 클래스는 XML 데이터에 대한 프로그래밍 접근을 제공합니다. 이 가이드는 XML 로드, 요소 탐색 및 문서 직렬화에 대해 다룹니다.

단계별 가이드

1단계: 빌드 설정

cmake_minimum_required(VERSION 3.15)
project(XmlProcessing CXX)
set(CMAKE_CXX_STANDARD 17)

add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(XmlProcessing main.cpp)
target_link_libraries(XmlProcessing PRIVATE Aspose.Cells.Foss.Cpp)

2단계: 헤더 포함

#include "aspose/cells_foss/XmlDocument.h"
#include "aspose/cells_foss/XmlElement.h"
#include "aspose/cells_foss/XmlAttribute.h"

using namespace Aspose::Cells_FOSS;

3단계: XML 문서 로드

메모리 내 문서 트리로 XML 문자열을 구문 분석하려면 XmlDocument::Load를 사용하십시오:

int main() {
    XmlDocument doc;
    doc.Load("<root><item key=\"a\">Hello</item><item key=\"b\">World</item></root>");
    return 0;
}

4단계: Null 요소 확인

XmlElement은 핸들 기반 모델을 사용합니다 — 존재하지 않는 경로에서 반환된 요소는 null입니다. 데이터를 접근하기 전에 항상 IsNull()을(를) 확인하세요:

XmlElement root = doc.GetRootElement();
if (!root.IsNull()) {
    std::string val = root.GetValue();
}

5단계: 속성 탐색

XmlElement::GetAttributes()을(를) 사용하여 속성 컬렉션을 가져옵니다. 각 속성 핸들은 이름과 값을 노출합니다:

auto attrs = root.GetAttributes();
for (auto& attr : attrs) {
    bool isNull = attr.IsNull();
}

6단계: UTF-8 문자열로 직렬화

XmlDocument::SaveToUtf8()을(를) 사용하여 직렬화된 XML을(를) 가져옵니다:

std::string xml = doc.SaveToUtf8();

7단계: 구문 분석 오류 처리

신뢰할 수 없는 XML을(를) 처리할 때 XmlDocument::Load을(를) try/catch 블록으로 감싸세요:

try {
    doc.Load(xmlContent);
} catch (const XmlParsingException& ex) {
    // Handle malformed XML
}

일반적인 문제와 해결 방법

IsNull() 예기치 않게 true를 반환합니다 문서에 요소 경로가 존재하지 않습니다. 탐색하기 전에 XML 구조가 예상 스키마와 일치하는지 확인하십시오.

XmlParsingException 로드 시 입력이 잘못 형성되었거나 지원되지 않는 엔터티를 포함하고 있습니다. 전달하기 전에 외부 도구로 XML를 검증하십시오. Load.

SaveToUtf8() 예기치 않은 출력을 반환합니다 문서 구조가 이후에 수정되었습니다 Load. 모든 중간 단계를 확인하십시오 Build 작업이 올바르게 완료되었습니다.

속성을 찾을 수 없습니다 속성 조회는 대소문자를 구분합니다. 속성 이름이 XML 소스에 표시된 대로 정확히 일치하는지 확인하십시오.

다음으로부터 빈 결과 GetValue() 공백만 포함하는 텍스트 노드는 빈 문자열을 반환할 수 있습니다. 요소에 공백이 아닌 내용이 있는지 확인하려면 원시 XML를 확인하십시오.

자주 묻는 질문

XML 레이어는 애플리케이션 사용을 위한 것인가, 아니면 내부용만을 위한 것인가?

XmlDocument, XmlElement, XmlAttribute 클래스는 공개 API의 일부이며 직접 사용할 수 있습니다. 매퍼 클래스(WorkbookXmlMapper, WorksheetXmlMapper 등)는 XlsxWorkbookSerializer에 의해 호출되는 내부 헬퍼이며 직접 사용을 의도하지 않습니다.

새로운 XML 문서를 처음부터 만들 수 있나요?

예. XmlDocument::Build를 사용해 프로그래밍 방식으로 문서를 구성한 다음, XmlElement와 XmlAttribute::MakeAttribute를 사용해 노드를 추가합니다.

XmlDocument가 XPath 쿼리를 지원합니까?

아니요. 현재 구현은 요소 핸들 탐색만 제공하며, XPath는 지원되지 않습니다.

SaveToUtf8()가 생성하는 인코딩은 무엇인가요?

출력은 항상 UTF-8 인코딩된 XML입니다. XML 선언(<?xml version="1.0" encoding="UTF-8"?>)이 출력에 포함됩니다.

XmlDocument를 사용해서 XLSX 아카이브 파트를 읽을 수 있나요?

XLSX 아카이브 파트는 XlsxWorkbookSerializer에 의해 내부적으로 관리됩니다. 원시 아카이브 파트를 추출할 수 있는 공개 API는 없습니다. 모든 XLSX 로드/저장 작업에는 Workbook을(를) 사용하십시오.

참조

 한국어