Wie man mit XML Processing in C++ arbeitet

Wie man mit XML Processing in C++ arbeitet

Aspose.Cells FOSS für C++ beinhaltet eine leichtgewichtige XML Processing-Schicht, die intern zum Lesen und Schreiben von Open XML Teilen verwendet wird. Die Klassen XmlDocument, XmlElement und XmlAttribute bieten programmgesteuerten Zugriff auf XML Daten. Dieser Leitfaden behandelt das Laden von XML, das Durchlaufen von Elementen und das Serialisieren von Dokumenten.

Schritt-für-Schritt-Anleitung

Schritt 1: Build einrichten

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)

Schritt 2: Header einbinden

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

using namespace Aspose::Cells_FOSS;

Schritt 3: Ein XML-Dokument laden

Verwende XmlDocument::Load, um einen XML-String in den im Speicher befindlichen Dokumentbaum zu parsen:

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

Schritt 4: Auf Null-Elemente prüfen

XmlElement verwendet ein handle-basiertes Modell — ein Element, das von einem fehlenden Pfad zurückgegeben wird, ist null. Überprüfen Sie stets IsNull(), bevor Sie auf Daten zugreifen:

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

Schritt 5: Attribute durchlaufen

Verwenden Sie XmlElement::GetAttributes(), um die Attributsammlung abzurufen. Jeder Attribut-Handle stellt seinen Namen und Wert bereit:

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

Schritt 6: In UTF-8-String serialisieren

Verwenden Sie XmlDocument::SaveToUtf8(), um das serialisierte XML zu erhalten:

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

Schritt 7: Parse-Fehler behandeln

Setzen Sie XmlDocument::Load in einen try/catch-Block, wenn Sie nicht vertrauenswürdige XML verarbeiten:

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

Häufige Probleme und Lösungen

IsNull() gibt unerwartet true zurück Der Elementpfad existiert nicht im Dokument. Überprüfen Sie, ob die XML-Struktur Ihrem erwarteten Schema entspricht, bevor Sie traversieren.

XmlParsingException beim Laden Die Eingabe ist fehlerhaft oder enthält nicht unterstützte Entitäten. Validieren Sie die XML mit einem externen Tool, bevor Sie sie an Load.

SaveToUtf8() liefert unerwartete Ausgabe Die Dokumentenstruktur wurde nach Load. Überprüfen Sie alle Zwischenschritte Build Operationen wurden korrekt abgeschlossen.

Attribute nicht gefunden Die Attributsuche ist case-sensitive. Vergewissern Sie sich, dass der Attributname exakt mit dem in der XML-Quelle übereinstimmt.

Leeres Ergebnis von GetValue() Textknoten, die nur Leerzeichen enthalten, können einen leeren String zurückgeben. Prüfen Sie das rohe XML, um sicherzustellen, dass das Element nicht nur Leerzeichen enthält.

Häufig gestellte Fragen

Ist die XML-Schicht für die Verwendung in Anwendungen oder nur für den internen Gebrauch vorgesehen?

Die Klassen XmlDocument, XmlElement und XmlAttribute sind Teil des öffentlichen API und können direkt verwendet werden. Die Mapper-Klassen (WorkbookXmlMapper, WorksheetXmlMapper usw.) sind interne Hilfsprogramme, die von XlsxWorkbookSerializer aufgerufen werden, und sind nicht für die direkte Verwendung vorgesehen.

Kann ich ein neues XML-Dokument von Grund auf erstellen?

Ja. Verwenden Sie XmlDocument::Build, um ein Dokument programmgesteuert zu erstellen, und verwenden Sie anschließend XmlElement und XmlAttribute::MakeAttribute, um Knoten hinzuzufügen.

Unterstützt XmlDocument XPath-Abfragen?

Nein. Die aktuelle Implementierung bietet nur die Traversierung von Element-Handles; XPath wird nicht unterstützt.

Welches Encoding erzeugt SaveToUtf8()?

Die Ausgabe ist immer UTF-8 kodiert XML. Die XML-Deklaration (<?xml version="1.0" encoding="UTF-8"?>) ist in der Ausgabe enthalten.

Kann ich XmlDocument verwenden, um XLSX-Archivteile zu lesen?

Die XLSX-Archivteile werden intern von XlsxWorkbookSerializer verwaltet. Es gibt keine öffentliche API, um rohe Archivteile zu extrahieren. Verwenden Sie Workbook für alle XLSX-Lade-/Speichervorgänge.

Siehe auch

 Deutsch