Wie parse eine XML-Datei mit RapidXml
Ich parse eine XML-Datei in C++. Ich recherchierte und fand die RapidXml Bibliothek für diese.
Habe ich Zweifel an doc.parse<0>(xml)
.
Kann xml
ein .xml-Datei oder muss es ein string
oder char *
?
Wenn ich nur string
oder char *
dann denke ich, ich muss Lesen Sie die gesamte Datei und speichern Sie es in ein char-array und übergeben Sie den Zeiger an die Funktion?
Gibt es eine Möglichkeit, direkt eine Datei verwenden, weil ich brauchen würde, ändern Sie die XML-Datei im code auch.
Wenn das nicht möglich ist, in RapidXml dann schlagen Sie bitte ein paar andere XML-Bibliotheken in C++.
Dank!!!
Ashd
- Das argument der xml_document::parse() eine null-terminierte Zeichenfolge mit dem xml. So brauchen Sie nur zum erstellen eines file2string Funktion. Lesen Sie die Datei in einen Vektor<char> buffer und dann pass &buffer[0] parse().
Du musst angemeldet sein, um einen Kommentar abzugeben.
RapidXml kommt mit einer Klasse zu tun dies für Sie,
rapidxml::file
imrapidxml_utils.hpp
- Datei.So etwas wie:
Beachten Sie, dass die
xmlFile
- Objekt enthält nun alle Daten für das XML, was bedeutet, dass, wenn es den Bereich verlässt und zerstört die doc-variable ist nicht mehr sicher verwendbar. Wenn Sie aufrufen, analysiert, innerhalb einer Funktion, müssen Sie irgendwie behalten diexmlFile
Objekt im Speicher (Globale variable, neu, etc), so dass der doc bleibt gültig.Neu in C++ selber... aber ich wollte eine Lösung.
YMMV!
Shout Out an SiCrane auf dieser thread:
- und so ersetzen "string" mit einem Vektor - - - - (Dank anno)
Bitte kommentieren und mir helfen lernen auch! Ich bin sehr neu in diesem
Sowieso, das scheint zu funktionieren für einen guten start:
Wir in der Regel Lesen Sie den XML-Code von der Festplatte in ein
std::string
, dann machen Sie eine sichere Kopie in einenstd::vector<char>
wie unten gezeigt:Für eine komplette source-code-check:
Lesen einer Zeile aus der xml-Datei mit C++
Den Handbuch sagt uns:
RapidXML Blätter laden der Charakter-Daten aus einer Datei, um Sie. Entweder Lesen Sie die Datei in einen Puffer, wie anno vorgeschlagen, oder alternativ verwenden, einige Speicher-mapping-Technik. (Aber schauen Sie bis
parse_non_destructive
Flagge zuerst.)