XML-Parser mit "Suchen & Ersetzen" Funktion (C++)
-
Hallo Leute,
ich bin auf der Suche nach einem XML-Parser in C++ der eine "Suchen und Ersetzen" Funktion besitzt.Beispiel XML-Datei:
<root> <data> This is data. </data> </root>
Nachdem durchlaufen der zukünftigen Programmierung soll der Inhalt der XML-Datei zum Beispiel wie folgt aussehen:
<root> <data> Edited! </data> </root>
Es wäre super, wenn jemand einen geeigneten XML-Parser mit einer entsprechenden Funktion kennt!
Vielen Dank für die Hilfe!
-
Benutze doch http://pugixml.org/ - suchen kannst du dann auch über XPath.
-
Vielen Dank für die Antwort!
Ich habe mich nun einige Stunden mit dem PugiXml und dem Xpath beschäftigt. Der PugiXml habe ich auch erfolgreich in mein Projekt eingebunden. Leider habe ich es aber bisher noch nicht geschafft, trotz durchsuchen der Dokumentation, die richtigen Funktionen von PugiXml und Xpath für mein Vorhaben("Suchen und Ersetzen") zu finden.Kann mir vielleicht jemand mit einem kleinen Beispiel auf die Sprünge helfen?
Danke!
-
#include <pugixml.hpp> #include <iostream> int main() { pugi::xml_document doc; auto result = doc.load_string("<root><data>This is data.</data></root>"); if (!result) { std::cerr << "XML parse error\n"; return 1; } std::cout << "Document BEFORE editing:\n"; doc.save(std::cout); auto data = doc.select_node("/root/data"); if (!data) { std::cerr << "/root/data element not found\n"; return 1; } auto text = data.node().text(); text.set("Edited!"); std::cout << "Document AFTER editing:\n"; doc.save(std::cout); }
-
Vielen Dank für deine Hilfe Theta.
Durch dich habe ich es nun verstanden. Super!Ich habe den Code nachvollzogen und für mich noch etwas angepasst.
Eine kleine Frage hätte ich noch...und zwar wenn zum Beispiel die XML-Datei wie folgt aussieht:
<root> <data> This is data. </data> <data> This is data. </data> <data> This is data. </data> </root>
Wie würde ich es hinbekommen, dass die Programmierung mir zwischen jeden Start- und End-Tag von <data> den Text "Edited!" reinschreibt?
Momentan macht er ja nachvollziehbar nur für den ersten...
-
Einfach
..::select_nodes(..)
verwenden und anschliessend über das Resultat-Set iterieren.PugiXml hat ein guter Quickstart Guide und eine Referenz-Dokumenation.
-
Nur am Rande: Alternativ könntest Du auch XSLT verwenden ... sofern Du eigentlich nur "Suchen & Ersetzen" möchtest ... und C++ keine harte Anforderung ist.