我正在创建一个必须在WSH中运行的Javascript。 目标是从本地磁盘读取2 xml文件。该脚本必须从2个不同的文件夹中获取2个文件,这些文件已在config.xml中确定。
config.xml示例
<!-- language: lang-xml -->
<file>
<name>C:\Users\changeFolder\</name>
</file>
<file>
<name>C:\Users\supplyFolder\</name>
</file>
在这两个文件夹中有名为change.xml(在changeFolder中)和supply.xml(在supplyFolder中)的文件。
我接下来要做的是从config xml获取值并存储在var:
中<!-- language: lang-js -->
var folderNaam1 = getNodeValue(naamElementConfig[0]);
var folderNaam2 = getNodeValue(naamElementConfig[1]);
我编写了自己的函数getNodeValue,如下所示:
<!-- language: lang-js -->
function getNodeValue(target) {
return target.childNodes[0].nodeValue;
}
此函数返回xml中描述的确切路径:
C:\Users\changeFolder\
C:\Users\supplyFolder\
我的下一个功能是从这些文件夹中获取第一个文件。没有问题,我只拿第一个文件,因为它们永远不应该是文件夹中的2个文件。 我这样做的方法是使用下一个功能:
<!-- language: lang-js -->
var fileNaam1 = getFileOutFolder(folderNaam1);
var fileNaam2 = getFileOutFolder(folderNaam2);
使用此功能:
<!-- language: lang-js -->
function getFileOutFolder(folder) {
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
var objFolder = objFSO.GetFolder(folder);
var colFiles = new Enumerator(objFolder.Files);
return colFiles.item();
}
当我检查这个函数的返回值时,我得到了我期望得到的结果:
C:\Users\changeFolder\change.xml
C:\Users\supplyFolder\supply.xml
当我在loadXml函数中输入此值时,它不起作用。这是我写的XMLLoad函数:
<!-- language: lang-js -->
function loadXML(name) {
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
if(!xmlDoc.load(name)) {
WScript.Echo("Error reason: " + xmlDoc.parseError.reason);
}
return xmlDoc;
}
脚本在if(!xmlDoc.load(name))
处出错。错误是:
Microsoft JScript runtime error: Invalid procedure call or argument.
所以我怀疑name变量(我希望读入的xml文件的完整路径)是错误的。
奇怪的是,当我复制并粘贴xml配置中的确切路径时,读取该路径并将它作为名称参数确实可以正常工作。所以我不知道在阅读文件名时脚本出错的地方。
谢谢!
答案 0 :(得分:0)
得到修复,不知道为什么这实际上有效,但我在getFileOutFolder函数中添加了一些东西。我现在返回 colFiles.item()+“”,而不是返回colFiles.item()。通过添加+“”脚本正在运行。不知道为什么,但也许它可以帮助别人!