2009-06-26 80 views
2

我想要一个脚本使用不同的xslt样式表自动将一个xml文件转换成多个html文件。但是,无论我尝试什么,我都会遇到错误。我已经在VBscript和JScript中试过,并且都给我错误。 xml文件是537 KB,而xsl文件是5 KB。JScript/VBScript错误

这里是JScript中的迭代1。这个脚本适用于我的一个样式表(一个创建较小html文件的样式表),但是在创建更大的html文件的样式表上,它给了我一个“无效的过程调用或参数”(超出范围)错误:

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中可以使用哪些其他库/对象来完成这项工作?

回答

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(除了“更新更好”,我猜)。
  • 只有排除它作为一个原因,作为管理员级别的用户,并在不同的机器上运行整个事情。看看错误是否可重现。
  • 如果一切都失败了,请将文件上传到某处,然后在这里发布链接,我也会看看它们。

希望这会有所帮助。

+0

Tomalak, 感谢您的帮助。我尝试了以上所有内容。 xml/xsl格式良好。安装/重新安装没有区别。我能够在不同的机器上重现它。 4.0给出了基本相同的结果(尽管在迭代2中它没有给出错误,但产生了一个空的html文件)。 msxsl.exe运行良好,因此可能是使用的解决方案,但令人沮丧的是我无法使用脚本来处理它。我已经将这些文件上传到http://www.obryantfamilytree.com/TestXSL.zip,主要是为了好奇心,因为msxsl.exe解决方案能够正常工作,所以如果您倾向于... 再次感谢。 – 2009-06-29 16:28:39