JScript / VBScript错误

时间:2009-06-26 23:33:03

标签: javascript xml xslt vbscript

我正在尝试让脚本使用不同的xslt样式表自动将xml文件转换为几个html文件。但是,无论我尝试什么,我都会遇到错误。我已经在VBscript和JScript中尝试过它,并且都给了我错误。 xml文件为537 KB,xsl文件为5 KB。

这是JScript中的迭代1。这个脚本适用于我的一个样式表(一个创建一个较小的html文件的样式表),但是在创建一个更大的html文件的样式表上,它在outtr上给了我一个“无效的过程调用或参数”(好像是outtr didn “没有正确返回”错误:

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中收到“Unspecified error”代码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中使用一些其他库/对象来完成工作吗?

1 个答案:

答案 0 :(得分:3)

在任何情况下,几KB的XML都不会破坏MSXML。机器的内存是限制,因此文件大小不是问题。主机语言(JScript或VBScript)的选择也完全不相关,VBScript无法做到,但JScript不能,反之亦然。你在这里做COM,所以语言也不是问题。停止调查这个方向是安全的。

这留下了一种可能性。你一定做错了。 ;-)这可能包括您机器上的MSXML配置或安装问题,甚至可能是错误的文件系统访问设置或进程凭据。

由于我无法发现您的代码中存在直接问题,并且您没有提供任何用于测试的XML,因此我只推荐一些可能有助于调试此问题的内容。尝试,不一定按顺序:

  • 检查所有XML文件是否格式正确且编码正确。我相信你已经完成了。将它们加载到IE中就足够了,如果这样就可以了。
  • 删除并重新安装MSXML,确保您还安装了旧版本(4.0)。
  • 下载msxsl.exe from Microsoft并在命令行上进行转换,检查它们是否正常工作 - 这个小工具在内部使用MSXML,过去从未让我失望。
  • 使用"MSXML2.DomDocument.4.0"尝试使用代码,因为无论如何都没有明显的理由使用6.0(除了“更新更好”,我猜)。
  • 仅将其排除为原因,将整个事件作为管理员级别用户运行,并在另一台计算机上运行。查看错误是否可重现。
  • 如果所有其他方法都失败了,请将文件上传到某处,在此处发布链接,我也会看一下它们。

希望这有帮助。