私は持っていて、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 を使用している場合は、すべてのノードを深さ優先で繰り返し処理し、構築中の文字列にノードのテキストを追加します。それを行う方法についてSOのいくつかの答えがあります。つまり、TinyXML Iterating over a Subtree