3

私は持っていて、std::string xmlString = "<out><return>Hello</return></out>"すべてのタグを削除したいです!(tinyXML->すでにロードされていることを除いて、追加のライブラリなしで)

結果->こんにちは

どうも

4

3 に答える 3

3

コンパイラと標準ライブラリが新しいC++11 正規表現をサポートしている場合は、 std::regex_replace.

他にも使用できる正規表現ライブラリがあります。

正規表現を使用したくない場合は、「タグ」をチェックしながら文字列を手動でコピーできます。が表示されたら、 が表示'<'されるまで、コピーせずにループを続けます'>'

于 2012-12-06T09:01:32.950 に答える
3

考えられる解決策:

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;
}
于 2012-12-06T11:54:22.970 に答える
0

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

于 2012-12-06T09:56:58.137 に答える