Hur man arbetar med XML bearbetning i C++
Aspose.Cells FOSS för C++ inkluderar ett lättviktigt XML bearbetningslager som används internt för att läsa och skriva Open XML delar. XmlDocument, XmlElement och XmlAttribute klasserna ger programmatisk åtkomst till XML data. Denna guide täcker inläsning av XML, traversering av element och serialisering av dokument.
Steg-för-steg guide
Steg 1: Ställ in bygget
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)Steg 2: Inkludera rubriker
#include "aspose/cells_foss/XmlDocument.h"
#include "aspose/cells_foss/XmlElement.h"
#include "aspose/cells_foss/XmlAttribute.h"
using namespace Aspose::Cells_FOSS;Steg 3: Ladda ett XML dokument
Använd XmlDocument::Load för att parsa en XML sträng till det minnesbaserade dokumentträdet:
int main() {
XmlDocument doc;
doc.Load("<root><item key=\"a\">Hello</item><item key=\"b\">World</item></root>");
return 0;
}Steg 4: Kontrollera null-element
XmlElement använder en handtagsbaserad modell — ett element som returneras från en saknad sökväg är null. Kontrollera alltid IsNull() innan du får åtkomst till data:
XmlElement root = doc.GetRootElement();
if (!root.IsNull()) {
std::string val = root.GetValue();
}Steg 5: Traversera attribut
Använd XmlElement::GetAttributes() för att hämta attributsamlingen. Varje attributhandtag avslöjar sitt namn och värde:
auto attrs = root.GetAttributes();
for (auto& attr : attrs) {
bool isNull = attr.IsNull();
}Steg 6: Serialisera till UTF-8-sträng
Använd XmlDocument::SaveToUtf8() för att få den serialiserade XML:
std::string xml = doc.SaveToUtf8();Steg 7: Hantera tolkningsfel
Omge XmlDocument::Load med ett try/catch-block när du bearbetar opålitlig XML:
try {
doc.Load(xmlContent);
} catch (const XmlParsingException& ex) {
// Handle malformed XML
}Vanliga problem och lösningar
IsNull() returnerar true oväntat Elementvägen finns inte i dokumentet. Verifiera att XML-strukturen matchar ditt förväntade schema innan traversering.
XmlParsingException vid laddning Indatan är felaktigt formaterad eller innehåller ej stödda entiteter. Validera XML med ett externt verktyg innan du skickar den till Load.
SaveToUtf8() returnerar oväntad output Dokumentstrukturen modifierades efter Load. Verifiera alla mellansteg Build operationer slutfördes korrekt.
Attribut hittades inte Sökning av attribut är skiftlägeskänslig. Verifiera att attributnamnet matchar exakt som det visas i XML källan.
Tomt resultat från GetValue() Textnoder som bara innehåller blanksteg kan returnera en tom sträng. Kontrollera den råa XML för att bekräfta att elementet har innehåll som inte är blanksteg.
Vanliga frågor
Är XML-lagret avsett för applikationsanvändning eller bara intern användning?
Klassen XmlDocument, XmlElement och XmlAttribute är en del av den offentliga API och kan användas direkt. Mappningsklasserna (WorkbookXmlMapper, WorksheetXmlMapper, etc.) är interna hjälpreda som anropas av XlsxWorkbookSerializer och är inte avsedda för direkt användning.
Kan jag skapa ett nytt XML-dokument från grunden?
Ja. Använd XmlDocument::Build för att konstruera ett dokument programatiskt, och använd sedan XmlElement och XmlAttribute::MakeAttribute för att lägga till noder.
Stöder XmlDocument XPath-frågor?
Nej. Den nuvarande implementationen erbjuder endast traversering av elementhandtag; XPath stöds inte.
Vilken kodning producerar SaveToUtf8()?
Utdata är alltid UTF-8 kodad XML. XML-deklarationen (<?xml version="1.0" encoding="UTF-8"?>) inkluderas i utdata.
Kan jag använda XmlDocument för att läsa XLSX-arkivdelar?
XLSX-arkivdelarna hanteras internt av XlsxWorkbookSerializer. Det finns ingen offentlig API för att extrahera råa arkivdelar. Använd Workbook för alla XLSX-laddnings-/sparningsoperationer.