【问题标题】:I want to replace an element in a QString - QT - C++我想替换 QString - QT - C++ 中的一个元素
【发布时间】:2021-05-19 07:41:42
【问题描述】:

我有以下问题: 我在 QString 中保存了一个 XMLStart。

QString f = "<class=\"go\">\n"
            "<number>2</number>\n"
            "<column>3</column>\n"
            "<row>4</row>";

我想通过例如使用替换或类似的方法来更改此字符串中包含 7 的行的值。

f.replace();

我怎样才能做到这一点?这可能吗?

问候

【问题讨论】:

  • 这可能吗?我希望答案是肯定的。
  • 这取决于您想要达到的目标。 f.replace("&lt;row&gt;4&lt;/column&gt;", "&lt;row&gt;7&lt;/row&gt;"); 应该按照您对这种特殊情况的要求进行操作。但是一旦值发生变化,代码就变得毫无用处。
  • 如果它总是第 7 行,可能会有不同的方法。使用QString::split('\n'); 转换为QStringList 然后处理QStringList 的第七项然后QStringlist::join('\n'); 这可能不是性能最高的代码,但如果你不需要做一千次它可能就足够了。您还可以在循环中使用 `QString::indexOf('\n',pos)' 来查找第 7 行和第 8 行索引并在两者之间进行替换。
  • 你的 xml 是否总是具有相同的结构?
  • 这是错字吗? 4 还是文件坏了?

标签: c++ qt replace qstring


【解决方案1】:

我不熟悉 Qt 中的 XML,我确信有一种更优雅的方式希望有人会在我之后发布,但这是一种简单的替代方式。

当然,您必须以更好的方式提供字符串值...

QString xml = "<class=\"go\">\n"
              "<number>2</number>\n"
              "<column>3</column>\n"
              "<row>4</row>";
QString tag = "row";
QString val = "7";

QByteArray exp("<%1>%2</%1>");
QString rex = QString(exp).arg(tag, ".*");
QString rep = QString(exp).arg(tag, val);

xml.replace(QRegExp(rex), rep);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2013-03-10
    • 2014-05-19
    • 1970-01-01
    相关资源
    最近更新 更多