Parsen eines Wertes zwischen zwei Tags (c++, xml)
Hallo,
ich habe schon öfter einen Parser geschrieben und muss es mal wieder...(erste mal in c++).
Ich frage mich deshalb gerade ob es da eine andere Möglichkeit als dieses ganze string gesplitte gibt wie ich das umsetzen kann.
So in der art würde die XML-Datei aussehen:
Mein Ansatz wäre Zeile auslesen -> wenn tagX -> nächste Zeile einlesen-> Splitten -> Wert einlesen
Mit Split ist das halt sehr umständlich, da das öffnende tag und schließende sich unterscheiden und außerdem noch Tags verschachtelt sein können...
Also die Frage:
Gibt es einen einfacheren Weg? Sowas wie split(string, anfangstag, endtag) wäre super xD - oder bleibt das in der Hand meiner Kreativität...
ich habe schon öfter einen Parser geschrieben und muss es mal wieder...(erste mal in c++).
Ich frage mich deshalb gerade ob es da eine andere Möglichkeit als dieses ganze string gesplitte gibt wie ich das umsetzen kann.
So in der art würde die XML-Datei aussehen:
<tag1>
<tag2>wert</tag2>
</tag1>
Mein Ansatz wäre Zeile auslesen -> wenn tagX -> nächste Zeile einlesen-> Splitten -> Wert einlesen
Mit Split ist das halt sehr umständlich, da das öffnende tag und schließende sich unterscheiden und außerdem noch Tags verschachtelt sein können...
Also die Frage:
Gibt es einen einfacheren Weg? Sowas wie split(string, anfangstag, endtag) wäre super xD - oder bleibt das in der Hand meiner Kreativität...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 336843
Url: https://administrator.de/contentid/336843
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
1 Kommentar
Mit Split ist das halt sehr umständlich
Richtig das ist auch Quatsch.XMLDocument Klasse ?
https://msdn.microsoft.com/en-us/library/system.xml.xmldocument(v=vs.110 ...
http://forums.codeguru.com/showthread.php?220959-how-to-use-XmlDocument ...
Regex?
http://www.cplusplus.com/reference/regex/
Beispiel:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <regex>
int _tmain(int argc, _TCHAR* argv)
{
std::string str("<root><tag1>Test1</tag1><tag1>Test2</tag1><root>");
std::smatch sm;
std::regex e("<tag1>(.*?)</tag1>");
if (regex_search(str,e)){
while(std::regex_search(str,sm,e,regex_constants::match_any)){
std::cout << sm[1].str() << endl;
str = sm.suffix().str();
}
return 0;
}else{
cout << "No match.\n";
return 1;
}
return 0;
}