у меня есть std::string xmlString = "<out><return>Hello</return></out>"
и я хочу
удалить все теги! (без дополнительной библиотеки, кроме tinyXML -> уже загружен)
результат -> Привет
Спасибо
Если ваш компилятор и стандартная библиотека поддерживают новый C ++ 11 регулярных выражений вы могли бы использовать std::regex_replace
.
Есть и другие библиотеки регулярных выражений, которые вы можете использовать.
Если вы не хотите использовать регулярные выражения, вы можете вручную скопировать строку, одновременно проверяя наличие «тегов». Когда вы видите '<'
просто продолжайте цикл без копирования, пока не увидите '>'
,
Возможное решение:
std::string ClassA::ParseXMLOutput(std::string &xmlBuffer)
{
bool copy = true;
std::string plainString = "";
std::stringstream convertStream;
// remove all xml tags
for (int i=0; i < xmlBuffer.length(); i++)
{
convertStream << xmlBuffer[i];
if(convertStream.str().compare("<") == 0) copy = false;
else if(convertStream.str().compare(">") == 0)
{
copy = true;
convertStream.str(std::string());
continue;
}
if(copy) plainString.append(convertStream.str());
convertStream.str(std::string());
}
return plainString;
}
Если вы уже используете tinyXML, выполните итерацию по всем узлам в первую очередь и добавьте текст узла в строящуюся строку. Есть несколько ответов о том, как это сделать, т.е. TinyXML Итерация по поддереву