qt 5.12.8中的QtXQuery问题



我正在尝试使用QtXQuery从文档中读取xml标记。除了附加到每个查询结果的'\n'-字符外,还可以正常工作。此外,在集合上使用last((-语句会返回集合中预期的项数,后面会重复+'\n'。为什么QXmlQuery似乎在结果中添加了"\n"?(以及如何解决它?(建议使用QStringList,只考虑第一个项目,但这似乎不适用于我的设置,因为在查询中使用了QStringList。evaluateTo(&qsl(无法返回任何结果。所以:我的问题是,这是否是libqt5xmlPatterns5中的一个错误,或者我的实现是否是导致这种行为的原因?我是否缺少有关如何使用QtXmlQuery的一些详细信息?这是一段代码:

  1. 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;
    }
    
  2. 输入查询字符串:

    'declare copy-namespaces no-preserve, inherit; declare variable $" + var_name + " external; doc($" + var_name + ")" + "//procLib/last()" '
    
  3. 用于数据描述的模式:

    <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];

不是很好,但它有效。。。

相关内容

  • 没有找到相关文章

最新更新