首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么QXmlQuery似乎在结果中添加了‘\n’?(如何解决呢?)

为什么QXmlQuery似乎在结果中添加了‘\n’?(如何解决呢?)
EN

Stack Overflow用户
提问于 2018-09-06 07:39:05
回答 2查看 187关注 0票数 3

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

代码语言:javascript
复制
#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?
    }
}

预期结果:

“好” 2

给定结果:

"ok\n“ 3.

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

\n 补充道:,为什么这是,?以及如何解决它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-06 08:01:24

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

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

代码语言:javascript
复制
QStringList results;
if (query.evaluateTo(&results))
{
    const QString& queryResult = results.first();
    qDebug() << queryResult;
    qDebug() << queryResult.size();
}

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

票数 1
EN

Stack Overflow用户

发布于 2018-09-06 08:33:38

或者,您可以完全控制序列化,并使用QXmlSerializerQXmlFormatter。这样,输出中将包含您所要求的任何内容,而不是提供给您的一些缺省值。它将有更多的代码,这是正确的,但意图将更加明确,而不仅仅是放弃一些换行符在最后。

下面是如何使用QXmlSerializer (默认情况下不产生冗余符号)来完成此操作的示例:

代码语言:javascript
复制
#include <QCoreApplication>
#include <QXmlQuery>
#include <QXmlSerializer>
#include <QString>
#include <QBuffer>
#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)");

    QBuffer buffer;
    buffer.open(QBuffer::ReadWrite);
    QXmlSerializer serializer(query, &buffer);
    if (query.evaluateTo(&serializer))
    {
        QString queryResult = QString::fromUtf8(buffer.buffer());
        qDebug() << queryResult;
        qDebug() << queryResult.size();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52198868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档