【问题标题】:Error: "the focus is undefined"错误:“焦点未定义”
【发布时间】:2014-06-27 13:32:27
【问题描述】:

我使用这个 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

当我用谷歌搜索时,我发现了这个:

如果函数是用户定义的函数,则转换后的参数值绑定到 函数的形式参数,并评估函数体。返回的值 然后通过应用将函数体转换为函数的声明返回类型 函数转换规则。

函数不会从 函数调用的环境。在评估函数体期间,焦点未定义, 除非它是由函数体内的某个表达式的操作定义的。使用一个 当焦点未定义时依赖于焦点的表达式会导致动态错误。

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

【问题讨论】:

    标签: xslt qtxml


    【解决方案1】:

    问题来自传递给焦点的缓冲区,显然它是在模式验证后静默关闭的。我添加了一个额外的“打开”

    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);
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 2018-07-14
      • 1970-01-01
      • 2017-06-17
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      相关资源
      最近更新 更多