c++ - 为什么 QXmlQuery 似乎在结果中添加了 `\n`? (以及如何解决?)

标签 c++ qt xpath qxmlquery

写了一些代码从 XML 中提取一些值,XPath 的结果似乎在内容之后添加了 \n

#include <QCoreApplication>
#include <QXmlQuery>
#include <QString>
#include <QDebug>

auto main(int argn, char* argc[])->int
{
    QCoreApplication app(argn, argc);

    QString replyContent="<Root isOk='ok'/>";

    QXmlQuery query;
    query.setFocus(replyContent);
    query.setQuery("string(//@isOk)");

    // Attribute seem to add \n
    QString queryResult;    
    if (query.evaluateTo(&queryResult))
    {
        qDebug() << queryResult;              // Where this \n come from?
        qDebug() << queryResult.size();       // Why 3? shouldn't be 2?
    }
}

预期结果:

"ok"
2

给出的结果:

"ok\n"
3

这显然有一些我想避免的副作用。

为什么要添加这个\n?以及如何解决?

最佳答案

认为这是由 QXmlFormatter 引入的,它在将结果序列化为 QString 时使用;我怀疑 QXmlFormatter::endDocument 写了一个换行符。

一个解决方法是改为输出到字符串列表,然后选择第一个元素:

QStringList results;
if (query.evaluateTo(&results))
{
    const QString& queryResult = results.first();
    qDebug() << queryResult;
    qDebug() << queryResult.size();
}

如果您需要所有结果,您可以选择 join() 结果。

关于c++ - 为什么 QXmlQuery 似乎在结果中添加了 `\n`? (以及如何解决?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52198868/

相关文章:

Android使用qt库

xml - XML/XSL:xpath和条件(否则)

java - 在使用 java 解析特定节点的 xml 后,尝试获取节点的下一个和 previous sibling 节点

java - 评估 Xpath 时的 InputStream 异常

c++ - 在 C++/C++ 中的十六进制范围内查找十六进制数

c++ - 类没有成员 "operator<<"

c++ - C++中的switch语句错误

c++ - QML 应用程序崩溃;如何调试?

c# - 与 C++ 结构等效(或更好)的 C# 结构

qt - 如何重新配置​​之前配置的 Qt Creator 项目?