Нужно из файла (вот его текст) спарсить только что, что находится между тегом <keyMaterial> </keyMaterial>
. Как можно это реализовать на С++?
//UPD. Проблему решил таким образом:
// ConsoleApplication11.cpp: определяет точку входа для консольного приложения.
//
#include <iostream>
#include <string>
#include <fstream>
#include <iterator>
int main()
{
std::ifstream ifs("{1AC815AC-7555-48FB-B768-9E171453FE23}.xml");
{
std::string s;
s.assign((std::istreambuf_iterator<char>(ifs.rdbuf())), std::istreambuf_iterator<char>());
size_t begin = s.find("<keyMaterial>") + 13;
size_t end = s.find("</keyMaterial>");
s = s.substr(begin, end - begin);
std::cout << s;
ifs.close();
}
system("pause");
return 0;
}
Как вариант:
#include <iostream>
#include <fstream>
#include <regex>
int main() {
try {
std::ifstream ifs("{1AC815AC-7555-48FB-B768-9E171453FE23}.xml");
std::stringstream sstream;
sstream << ifs.rdbuf();
std::string str = sstream.str();
std::regex rx("(?:.|\\n|\\r)*?<keyMaterial>(.+?)</keyMaterial>(?:.|\\n\\r)*");
std::smatch match;
if(!(std::regex_search(str, match, rx) && match.size()==2))
throw std::runtime_error("Substring not found!");
std::cout << match[1] << std::endl;
} catch(std::runtime_error &e) {
std::cout << "Error: " << e.what() << std::endl;
} catch(...) {
std::cout << "Some error!" << std::endl;
}
return 0;
}
Никак не могу разобраться как заставить работать Cimg с jpegПодключить всё подключил: