我使用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中启动。
答案 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事件(例如
function updateStatus(status){
$('#progress_status').html(status +' loading... ');
}
来自xslt:
<xsl:variable name="progress_status" select="concat('updateStatus("',string($name),'")')"/>
<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>
答案 1 :(得分:0)
首先,Saxon.parseXML()期望实际的词法XML内容作为其参数 - 而不是URI。我不确定你为什么不在这里使用requestXML()。
一般来说,我这样做的方法是通过使用ixsl:schedule-action()等待0(或非常小的东西)将转换分解成更小的部分。这为其他事物提供了执行的机会,您可以在此时更新进度条。