我正在尝试使用QtXQuery从文档中读取xml标记。除了附加到每个查询结果的'\n'-字符外,还可以正常工作。此外,在集合上使用last((-语句会返回集合中预期的项数,后面会重复+'\n'。为什么QXmlQuery似乎在结果中添加了"\n"?(以及如何解决它?(建议使用QStringList,只考虑第一个项目,但这似乎不适用于我的设置,因为在查询中使用了QStringList。evaluateTo(&qsl(无法返回任何结果。所以:我的问题是,这是否是libqt5xmlPatterns5中的一个错误,或者我的实现是否是导致这种行为的原因?我是否缺少有关如何使用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; }
-
输入查询字符串:
'declare copy-namespaces no-preserve, inherit; declare variable $" + var_name + " external; doc($" + var_name + ")" + "//procLib/last()" '
-
用于数据描述的模式:
<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>
用一个变通方法解决了这个问题:
results=results.remove('n');
results=results.split(' ')[0];
不是很好,但它有效。。。