从std :: string中删除所有xml标记

时间:2012-12-06 08:49:53

标签: c++ xml string tinyxml

我有一个std::string xmlString = "<out><return>Hello</return></out>",我想 删除所有标签! (没有额外的库,除了tinyXML - &gt;已经加载)

结果 - &gt;你好

THX

3 个答案:

答案 0 :(得分:3)

如果您的编译器和标准库支持新的C++11 regular expressions,您可以使用std::regex_replace

您还可以使用其他正则表达式库。

如果您不想使用正则表达式,那么您可以手动复制字符串,同时检查“标签”。当您看到'<'时,只需继续循环而不进行复制,直至看到'>'

答案 1 :(得分: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;
}

答案 2 :(得分:0)

如果您已经使用了tinyXML,则深度优先遍历所有节点,并将节点文本附加到您正在构建的字符串中。关于如何做到这一点,有一些SO的答案,即TinyXML Iterating over a Subtree