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
相关产品推荐
相关产品推荐

