【发布时间】:2012-12-06 08:49:52
【问题描述】:
我有一个std::string xmlString = "<out><return>Hello</return></out>",我想
删除所有标签! (没有额外的库,除了 tinyXML -> 已经加载)
结果 -> 你好
谢谢
【问题讨论】:
我有一个std::string xmlString = "<out><return>Hello</return></out>",我想
删除所有标签! (没有额外的库,除了 tinyXML -> 已经加载)
结果 -> 你好
谢谢
【问题讨论】:
如果您的编译器和标准库支持新的C++11 regular expressions,您或许可以使用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;
}
【讨论】:
ClassA::ParseXMLOutput 是你的函数的名称,还是来自一个库,还是什么? tyvm 这个!
如果您已经使用 tinyXML,请深度优先遍历所有节点并将节点的文本附加到您正在构建的字符串中。 SO有一些关于如何做到这一点的答案,即TinyXML Iterating over a Subtree
【讨论】: