Javascript 使用XSLT2.1的xsl:stream
我有一个将xsl应用于xml的javascript转换程序。 为了使用xsl:stream特性,我需要使用XSLT2.1 现在脚本如下所示:Javascript 使用XSLT2.1的xsl:stream,javascript,xslt,Javascript,Xslt,我有一个将xsl应用于xml的javascript转换程序。 为了使用xsl:stream特性,我需要使用XSLT2.1 现在脚本如下所示: main(); function main() { if ( WScript.Arguments.length != 3 ) { WScript.Echo("Usage: runTransform.js <xslfilename> <xmlfilename> <outputfil
main();
function main()
{
if ( WScript.Arguments.length != 3 )
{
WScript.Echo("Usage: runTransform.js <xslfilename> <xmlfilename> <outputfilename>");
WScript.Quit();
}
var xslfilename = WScript.Arguments.Item(0);
var xmlfilename = WScript.Arguments.Item(1);
var outputfilename = WScript.Arguments.Item(2);
var doc = LoadDOM(xmlfilename);
var xsl = LoadDOM(xslfilename);
var str = doc.transformNode(xsl);
var ado = new ActiveXObject("ADODB.Stream");
ado.Open();
ado.Position = 0;
ado.CharSet = "UTF-8";
ado.WriteText(str);
ado.SaveToFile(outputfilename, 2)
}
function LoadDOM(file)
{
var dom;
try {
dom = MakeDOM(null);
dom.load(file);
}
catch (e) {
alert("error" + e.description);
}
return dom;
}
function MakeDOM(progID)
{
if (progID == null) {
progID = "msxml2.DOMDocument.4.0";
}
var dom;
try {
WScript.Echo("ProgID is dom 4");
dom = new ActiveXObject(progID);
dom.async = false;
dom.validateOnParse = false;
//dom.resolveExternals = false;
}
catch (e) {
alert("MakeDom Error :" + e.description);
}
return dom;
}
function alert(str)
{
WScript.Echo(str);
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<transactions>
<transaction value="12.51"/>
<transaction value="3.99"/>
</transactions>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="2.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:mode streamable="yes" />
<xsl:stream href="E:\test_folder_stream\transactions.xml">
<count>
<xsl:value-of select="count(transactions/transaction)" />
</count>
</xsl:stream>
</xsl:stylesheet>
<?xml version="1.0"?>
test.js transactions.xsl transactions.xml output.xml
脚本不会抛出任何错误。
我编写的xsl是否不完整?
任何建议或链接都是有价值的
提前谢谢
Tazim.我认为目前没有任何XSLT处理器可以实现
xsl:stream
Saxon 9.3实现了XSLT 2.1(现在的XSLT 3.0)工作草案中的许多流功能,但还没有实现xsl:stream指令。我怀疑您使用的是XSLT1.0处理器。如果在样式表中指定version=“2.1”并将其扔给XSLT1.0处理器,它将忽略它不理解的xsl:stylesheet元素的所有子元素
事实上,xsl:stream
在XSLT 3.0中定义为一条指令,因此它不能作为xsl:stylesheet
的子项出现-它需要放在函数或模板中
如果需要流式处理,请获取一份Saxon 9.3 Enterprise Edition的副本,并仔细阅读文档,查看当前实现的工作草案的子集。不幸的是,您将无法从JavaScript中使用它。xsl中是否真的存在这些(
-
)符号?或者只是粘贴噪音?删除(-)标志。这个概念对我来说是新的。尝试使用它编写xsl很奇怪:在规范中使用了streamable
,而示例使用streaming
。
test.js transactions.xsl transactions.xml output.xml