Come lavorare con l'elaborazione XML in C++

Come lavorare con l'elaborazione XML in C++

Aspose.Cells FOSS per C++ include un leggero livello di elaborazione XML usato internamente per leggere e scrivere parti Open XML. Le classi XmlDocument, XmlElement e XmlAttribute forniscono accesso programmatico ai dati XML. Questa guida copre il caricamento di XML, l’attraversamento degli elementi e la serializzazione dei documenti.

Guida passo passo

Passo 1: Configura la build

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)

Passo 2: Includi gli header

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

using namespace Aspose::Cells_FOSS;

Passo 3: Carica un documento XML

Usa XmlDocument::Load per analizzare una stringa XML nell’albero del documento in memoria:

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

Passo 4: Verifica gli elementi null

XmlElement utilizza un modello basato su handle — un elemento restituito da un percorso mancante è null. Controlla sempre IsNull() prima di accedere ai dati:

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

Passo 5: Scorri gli attributi

Usa XmlElement::GetAttributes() per recuperare la raccolta di attributi. Ogni handle di attributo espone il suo nome e valore:

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

Passo 6: Serializza in stringa UTF-8

Usa XmlDocument::SaveToUtf8() per ottenere il XML serializzato:

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

Passo 7: Gestisci gli errori di parsing

Avvolgi XmlDocument::Load in un blocco try/catch quando elabori XML non attendibili:

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

Problemi comuni e soluzioni

IsNull() restituisce true inaspettatamente Il percorso dell’elemento non esiste nel documento. Verifica che la struttura XML corrisponda allo schema previsto prima della traversata.

XmlParsingException al caricamento L’input è malformato o contiene entità non supportate. Convalida il XML con uno strumento esterno prima di passarlo a Load.

SaveToUtf8() restituisce output inaspettato La struttura del documento è stata modificata dopo Load. Verifica tutti gli intermedi Build operazioni completate correttamente.

Attributi non trovati La ricerca dell’attributo è sensibile al maiuscolo/minuscolo. Verifica che il nome dell’attributo corrisponda esattamente a come appare nella sorgente XML.

Risultato vuoto da GetValue() I nodi di testo che contengono solo spazi bianchi possono restituire una stringa vuota. Controlla il XML grezzo per confermare che l’elemento contenga contenuto non costituito da spazi bianchi.

Domande frequenti

Il livello XML è destinato all’uso da parte dell’applicazione o solo all’uso interno?

Le classi XmlDocument, XmlElement e XmlAttribute fanno parte del API pubblico e possono essere usate direttamente. Le classi mapper (WorkbookXmlMapper, WorksheetXmlMapper, ecc.) sono helper interni chiamati da XlsxWorkbookSerializer e non sono destinate all’uso diretto.

Posso creare un nuovo documento XML da zero?

Sì. Usa XmlDocument::Build per costruire un documento in modo programmatico, poi usa XmlElement e XmlAttribute::MakeAttribute per aggiungere nodi.

Il XmlDocument supporta le query XPath?

No. L’implementazione attuale fornisce solo la traversata di handle di elementi; XPath non è supportato.

Quale codifica produce SaveToUtf8()?

L’output è sempre UTF-8 codificato XML. La dichiarazione XML (<?xml version="1.0" encoding="UTF-8"?>) è inclusa nell’output.

Posso usare XmlDocument per leggere le parti dell’archivio XLSX?

Le parti dell’archivio XLSX sono gestite internamente da XlsxWorkbookSerializer. Non esiste alcuna API pubblica per estrarre le parti grezze dell’archivio. Usa Workbook per tutte le operazioni di caricamento/salvataggio XLSX.

Vedi anche

 Italiano