【问题标题】:Remove all xml tags from a std::string从 std::string 中删除所有 xml 标签
【发布时间】:2012-12-06 08:49:52
【问题描述】:

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

结果 -> 你好

谢谢

【问题讨论】:

    标签: c++ xml string tinyxml


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      可能的解决方案:

      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 这个!
      • @Gracchus 这是我的函数的名称!
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-01-25
        • 1970-01-01
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-05
        • 2021-04-26
        • 2018-12-21
        相关资源
        最近更新 更多