Hoe te werken met XML Processing in C++

Hoe te werken met XML Processing in C++

Aspose.Cells FOSS voor C++ bevat een lichtgewicht XML verwerkingslaag die intern wordt gebruikt voor het lezen en schrijven van Open XML onderdelen. De XmlDocument, XmlElement en XmlAttribute klassen bieden programmatische toegang tot XML gegevens. Deze gids behandelt het laden van XML, het doorlopen van elementen en het serialiseren van documenten.

Stapsgewijze gids

Stap 1: Stel de build in

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)

Stap 2: Headers opnemen

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

using namespace Aspose::Cells_FOSS;

Stap 3: Laad een XML Document

Gebruik XmlDocument::Load om een XML string te parseren naar de in-memory documentboom:

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

Stap 4: Controleer op null-elementen

XmlElement gebruikt een op handles gebaseerd model — een element dat wordt geretourneerd vanuit een ontbrekend pad is null. Controleer altijd IsNull() voordat je gegevens benadert:

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

Stap 5: Doorloop attributen

Gebruik XmlElement::GetAttributes() om de attributencollectie op te halen. Elke attribuuthandle geeft zijn naam en waarde weer:

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

Stap 6: Serialiseer naar UTF-8 String

Gebruik XmlDocument::SaveToUtf8() om de geserialiseerde XML op te halen:

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

Stap 7: Afhandelen van parse-fouten

Wikkel XmlDocument::Load in een try/catch-blok bij het verwerken van niet-vertrouwde XML:

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

Veelvoorkomende problemen en oplossingen

IsNull() geeft onverwacht true terug Het elementpad bestaat niet in het document. Controleer of de XML structuur overeenkomt met je verwachte schema voordat je gaat traverseren.

XmlParsingException bij laden De invoer is misvormd of bevat niet-ondersteunde entiteiten. Valideer de XML met een extern hulpmiddel voordat je deze doorgeeft aan Load.

SaveToUtf8() geeft onverwachte output terug De documentstructuur werd gewijzigd na Load. Controleer alle tussenliggende Build operaties correct voltooid.

Attributen niet gevonden Attribuutopzoeking is hoofdlettergevoelig. Controleer of de attribuutnaam precies overeenkomt met hoe deze in de XML bron verschijnt.

Leeg resultaat van GetValue() Tekstknooppunten die alleen witruimte bevatten, kunnen een lege string retourneren. Controleer de ruwe XML om te bevestigen dat het element niet-lege inhoud heeft.

Veelgestelde vragen

Is de XML laag bedoeld voor gebruik door applicaties of alleen voor intern gebruik?

De XmlDocument, XmlElement en XmlAttribute klassen maken deel uit van de openbare API en kunnen direct worden gebruikt. De mapper-klassen (WorkbookXmlMapper, WorksheetXmlMapper, etc.) zijn interne helpers die door XlsxWorkbookSerializer worden aangeroepen en zijn niet bedoeld voor direct gebruik.

Kan ik een nieuw XML document vanaf nul maken?

Ja. Gebruik XmlDocument::Build om een document programmatisch op te bouwen, en gebruik vervolgens XmlElement en XmlAttribute::MakeAttribute om knooppunten toe te voegen.

Ondersteunt XmlDocument XPath-query’s?

Nee. De huidige implementatie biedt alleen traverseren van element-handles; XPath wordt niet ondersteund.

Welke codering produceert SaveToUtf8()?

De output is altijd UTF-8 gecodeerd XML. De XML declaratie (<?xml version="1.0" encoding="UTF-8"?>) wordt in de output opgenomen.

Kan ik XmlDocument gebruiken om XLSX-archiefonderdelen te lezen?

De XLSX-archiefonderdelen worden intern beheerd door XlsxWorkbookSerializer. Er is geen openbare API om ruwe archiefonderdelen te extraheren. Gebruik Workbook voor alle XLSX laad-/opslaoperaties.

Zie ook

 Nederlands