Saxon-CE进度条在处理时,渲染被阻止了吗?

时间:2014-12-16 07:18:34

标签: jquery xml twitter-bootstrap xslt saxon

我使用Saxon-CE转换XML文件。我想在XSLT处理器运行时设置进度条。但不知何故,似乎视图被阻止了。我甚至无法将按钮的值设置为"转换......"。 console.log告诉我按钮的html值发生了变化,但不知怎的,它没有渲染。

这是我到目前为止所做的:

function XSLT(selected){
    $('#transform-button').html('Transforming ...');
    console.log($('#transform-button').html());
    var xsltData = Saxon.requestXML("XSLT.xsl");
    var xmlData = Saxon.parseXML("XML.xml");
    var xsltProcessor = Saxon.newXSLT20Processor(xsltData);
    for (i = 0; i < selected.length; i++) {
        var percentage = 100 / selected.length * i;
        xsltProcessor.setParameter(null, "selected", selected[i]);
        var result = xsltProcessor.transformToDocument(xmlFile);
        var resdoc = xsltProcessor.getResultDocuments();
        Progress(Math.round(percentage));
    }
}

我正在使用Bootstrap&#34;进度条进度条条纹活动&#34;。

function Progress(val) {
    $('.progress-bar').css('width', val + '%').attr('aria-valuenow', val);
    $('.progress-bar').text(val + '%');

}

任何人都可以帮我完成这项工作吗?我的转换需要很长时间,所以我必须制作进度条或微调器或其他东西。但即使是一个微调器也无法在我的函数XSLT中启动。

2 个答案:

答案 0 :(得分:1)

我提出了这个解决方案:

var onSaxonLoad = function() {
    var xsl = Saxon.requestXML("toc.xsl");
    var xml = Saxon.requestXML("toc.xml");
    var proc = Saxon.newXSLT20Processor(xsl);
    proc.setSuccess(function(){
        removeProgressBar();            
    });

    setProgressBar(); 
    proc.updateHTMLDocument(xml);            
}

function setProgressBar(){
  //static for now in body
}

function removeProgressBar(){
  $('#page_load_progress').remove();
}

我正在使用全长进度条,因此我不需要更改其宽度。相反,我更新进度条内容以使用eval ed事件(例如

)从xslt设置文本
function updateStatus(status){
  $('#progress_status').html(status +' loading... ');
}

来自xslt:

<xsl:variable name="progress_status"   select="concat('updateStatus(&quot;',string($name),'&quot;)')"/>
<ixsl:set-property name="dummy"  select="ixsl:eval($progress_status)"/>

进度摘录

<div id="page_load_progress" class="modal show" data-backdrop="static">
    <div class="modal-backdrop  in" style="height:100%"></div>
    <div class="modal-dialog text-center">
        <div class="modal-content btn active" style="width: 40%">
            <div class="modal-body ">
                <progress style="width:100%;" ></progress>
                <div id="progress_status" class="text-info" ></div>
            </div>
        </div>
    </div>
</div>

enter image description here

答案 1 :(得分:0)

首先,Saxon.parseXML()期望实际的词法XML内容作为其参数 - 而不是URI。我不确定你为什么不在这里使用requestXML()。

一般来说,我这样做的方法是通过使用ixsl:schedule-action()等待0(或非常小的东西)将转换分解成更小的部分。这为其他事物提供了执行的机会,您可以在此时更新进度条。