我正在尝试让一个脚本使用不同的xslt样式表将一个xml文件自动转换为几个html文件。然而,无论我如何尝试,我都会遇到错误。我在VBscript和JScript中都尝试过,但两者都给了我错误。xml文件大小为537 KB,xsl文件大小为5 KB。
这是JScript中的迭代1。这个脚本适用于我的一个样式表(创建较小html文件的样式表),但在创建较大html文件的样式表上,它在outstr上给出了一个“无效的过程调用或参数”(好像outstr没有正确返回)错误:
var xsl = new ActiveXObject("MSXML2.DomDocument.6.0");
xsl.async = false;
var boolval = xsl.load("../Commands/commands.xsl");
if(!boolval)
{
WScript.Echo("XSL load error");
WScript.Quit();
}
var xml = new ActiveXObject("MSXML2.DomDocument.6.0");
xml.async = false;
boolval = xml.load("../Commands/commands.xml")
if(!boolval)
{
WScript.Echo ("XML load error " );
WScript.Quit();
}
var fso = new ActiveXObject("Scripting.FileSystemObject");
var outstr = xml.transformNode(xsl);
var ofl = fso.CreateTextFile("../Commands/commands.html", true, false);
ofl.Write (outstr);
ofl.Close();因此,这里是迭代2,使用transformNodeToObject方法。在这种情况下,我在msxml6.dll中得到一个“未指明的错误”代码80004005:
var xsl = new ActiveXObject("MSXML2.DomDocument.6.0");
xsl.async = false;
var boolval = xsl.load("../Commands/commands.xsl");
if(!boolval)
{
WScript.Echo("XSL load error");
WScript.Quit();
}
var xml = new ActiveXObject("MSXML2.DomDocument.6.0");
xml.async = false;
boolval = xml.load("../Commands/commands.xml")
if(!boolval)
{
WScript.Echo ("XML load error " );
WScript.Quit();
}
var result = new ActiveXObject("MSXML2.DomDocument.6.0");
xml.transformNodeToObject(xsl, result);
result.save("../Commands/commands.html");我的直觉告诉我,处理器根本无法处理创建这么大的文件。这是对的,还是我做错了什么。如果只是大小问题,有没有其他的库/对象可以在vbscript/jscript中使用来完成这项工作?
发布于 2009-06-27 08:15:28
在任何情况下,XML的几个kB都不会破坏MSXML。机器的内存是有限的,所以文件大小不是问题。此外,主机语言(JScript或VBScript)的选择也完全无关紧要,VBScript除了JScript之外什么都做不了,反之亦然。你在这里做的是COM,所以语言也不是问题。不要再往那个方向看了,这是安全的。
这就留下了一种可能性。你一定是做错了什么。;-)这可能包括您计算机上的MSXML配置或安装问题,甚至可能是错误的文件系统访问设置或进程凭据。
由于我在您的代码中找不到直接的问题,并且您也没有提供任何可用于测试的XML,因此我只能推荐一些可能有助于调试的东西。尝试一下,但不一定是按这个顺序:
"MSXML2.DomDocument.4.0"尝试你的代码,因为没有什么特别好的理由使用6.0 (我想,除了“越新越好”)。希望这能有所帮助。
https://stackoverflow.com/questions/1051711
复制相似问题