peterpa
Goto Top

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:
<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...

Content-Key: 336843

Url: https://administrator.de/contentid/336843

Printed on: April 24, 2024 at 08:04 o'clock

Mitglied: 132895
132895 May 04, 2017, updated at May 08, 2017 at 16:17:19 (UTC)
Goto Top
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;
}
Gruß