错误:"the focus is undefined"



我使用这个xslt (FpML是我的文档的根):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
    <xsl:sequence select="/FpML"/> 
 </xsl:template>
</xsl:stylesheet> 

if(schema.isValid())
{
    QXmlSchemaValidator validator(schema);
    QByteArray data(this->xmlTextEdit->toPlainText().toStdString().c_str());
    QBuffer buffer(&data);
    buffer.open(QIODevice::ReadOnly);
    if (validator.validate(&buffer))
        qDebug() << "instance document is valid";
    else
        qDebug() << "instance document is invalid";
    QXmlQuery query(QXmlQuery::XSLT20);
     query.setFocus(&buffer);
     qDebug() << QDir::current();
     QUrl XSLT("test__.xslt");
     if( XSLT.isValid())
     {
        query.setQuery(XSLT);
         QString result;
         query.evaluateTo(&result);
         this->xslTextEdit->setPlainText(result);
     }
}

我得到了这个错误:

at line 10, column 18: The focus is undefined

当谷歌我发现这个:

如果函数是用户定义函数,则转换后的实参值绑定到函数的形式参数,并对函数体进行求值。的返回值。方法将函数体转换为声明的函数返回类型函数转换规则。

函数不从对象继承焦点(上下文项、上下文位置和上下文大小)函数调用的环境。在函数体求值期间,焦点未定义,除非它是由函数体内某个表达式的动作定义的。an的用法当焦点未定义时,依赖于焦点的表达式将导致动态错误。

但我不确定我是否理解。问题真的在我的样式表中吗?

问题来自于传递给焦点的缓冲区,在模式验证之后,它被悄悄地关闭了。我添加了一个额外的"open"

if(schema.isValid())
{
    QXmlSchemaValidator validator(schema);
    QByteArray data(this->xmlTextEdit->toPlainText().toStdString().c_str());
    QBuffer buffer(&data);
    buffer.open(QIODevice::ReadOnly);
    if (validator.validate(&buffer))
        qDebug() << "instance document is valid";
    else
        qDebug() << "instance document is invalid";
    QXmlQuery query(QXmlQuery::XSLT20);
     qDebug() << QDir::current();
     QUrl XSLT("test__.xslt");
     if( XSLT.isValid())
     {
        buffer.open(QIODevice::ReadOnly);
        query.setFocus(&buffer);
        query.setQuery(XSLT);
         QString result;
         query.evaluateTo(&result);
         this->xslTextEdit->setPlainText(result);
     }
}

最新更新