You need to enable JavaScript to run this app. Qt 5.12.8中QtXQuery附换行符、last()异常及evaluateTo无结果问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Qt 5.12.8中QtXQuery附换行符、last()异常及evaluateTo无结果问题咨询

QtXQuery XML查询异常问题说明

已出现的异常现象

  • 单个查询结果末尾会额外附带\n字符
  • 对节点集合使用last()语句时,返回的集合项数量符合预期,但结果末尾会出现重复内容且附带\n

参考方案落地问题

此前社区通用解决方案建议使用QStringList接收查询结果并仅取第一个元素,但按照该方案调用query.evaluateTo(&qsl)时,接口完全无法返回任何结果。

待确认核心问题

需确认该现象属于libqt5xmlPatterns5库的bug、自身代码实现问题,还是遗漏了QtXmlQuery的使用细节?

相关实现材料

get_tag_value 函数实现

static lib_int_err_t get_tag_value(QString *result, QUrl schema_file, QString xml_file_name, QString var_name, QString query_str)
{
    lib_int_err_t ret_code = LIE_OK;
    QFile *xml_f= new QFile(xml_file_name);
    xml_f->open(QIODevice::ReadOnly);
    if(result!=nullptr){
        result->clear();
        QXmlSchema xmlschema;
        // QStringList *results = new QStringList();
        xmlschema.load(schema_file);
        QXmlQuery query(QXmlQuery::XQuery10, xmlschema.namePool());
        query.bindVariable(var_name, xml_f);
        query.setQuery(query_str);
        query.evaluateTo(result);
        // result->append(results->first());
        ret_code = LIE_OK;
    }
    else{
        ret_code = LIE_XML_MALFORMED;
    }
    xml_f->close();
    return ret_code;
}

输入的XQuery字符串

'declare copy-namespaces no-preserve, inherit; declare variable $" + var_name + " external; doc($" + var_name + ")" + "//procLib/last()" '

所用的XSD Schema定义

<xs:element name="toolConfig">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="processingLibsSettings">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="interfaceSchemaDef" type="xs:string" minOccurs="1" maxOccurs="1"/>
                        <xs:element name="interfaceSchemaPath" type="xs:string" minOccurs="1" maxOccurs="1"/>
                        <xs:element name="processingLibsInstances">
                            <xs:complexType>
                                <xs:sequence maxOccurs="unbounded">
                                    <xs:element name="procLib" minOccurs="0">
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:element name="procLibConfigName" type="xs:string"/>
                                                <xs:element name="procLibConfigPath" type="xs:string"/>
                                                <xs:element name="procLibName" type="xs:string"/>
                                                <xs:element name="procLibPath" type="xs:string"/>
                                            </xs:sequence>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="installDir" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

内容的提问来源于stack exchange,提问作者cpt-nil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 13:06:08