在javascript中从文件夹获取文件后加载xml

时间:2014-07-02 10:33:13

标签: javascript

我正在创建一个必须在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配置中的确切路径时,读取该路径并将它作为名称参数确实可以正常工作。所以我不知道在阅读文件名时脚本出错的地方。

谢谢!

1 个答案:

答案 0 :(得分:0)

得到修复,不知道为什么这实际上有效,但我在getFileOutFolder函数中添加了一些东西。我现在返回 colFiles.item()+“”,而不是返回colFiles.item()。通过添加+“”脚本正在运行。不知道为什么,但也许它可以帮助别人!