循环遍历XML并返回元素值

时间:2014-11-07 22:50:06

标签: xml vbscript

这是我的XML文档:

<FileScan>
    <Sites>
        <Site>
            <Name>Joe</Name>
            <Dir>\\webserver\ftp\Joe</Dir>
            <Email>Joe@anycompany.com</Email>
            <Subject>Hi Joe!</Subject>
        </Site>
        <Site>
            <Name>Ben</Name>
            <Dir>\\webserver\ftp\ben</Dir>
            <Email>ben@anycompany.com, benjamin@anycompany.com</Email>
            <Subject>Hi Ben!</Subject>
        </Site>
        <Site>
            <Name>Ian</Name>
            <Dir>\\webserver\ftp\Ian</Dir>
            <Email>Ian@anycompany.com</Email>
            <Subject>You are fired!</Subject>
        </Site>
        <Site>
            <Name>Mark</Name>
            <Dir>\\webserver\ftp\Mark</Dir>
            <Email>Mark@anycompany.com</Email>
            <Subject>Hi Mark</Subject>
        </Site>
    </Sites>
</FileScan>

我想做的是:

Open xmlDoc
Do while xmlDoc.eof <> true
   store <Name> to varNAME
   store <Dir> to varDIR
   store <Email> to varEMAIL
   store <Subject> to varSUBJECT
   Then run an already designed function
   Move to next XML <Site> tag
Loop

目前这就是我所拥有的:

Set xmlDoc = CreateObject("Microsoft.XMLDOM")

xmlDoc.Async = "False"
xmlDoc.Load("FileScan.xml")
Set colNodes = xmlDoc.selectNodes ("//Site/ (Name|Dir)")
For Each objNode in colNodes
    WScript.Echo objNode.nodeName & ": " & objNode.text
Next

我在弹出窗口中获取了Name和Dir,但我似乎无法按元素名称将它们存储到变量中。如何通过其特定名称引用元素并确保它是正确的元素。然后一遍又一遍地这样做,因为网站的数量可能会随着时间而变化?

1 个答案:

答案 0 :(得分:1)

首先,请确保在示例中添加结束</FileScan>

此代码将向您展示如何解决此问题。一定要使用像cscript / x这样的脚本调试你的脚本.vbs来逐步完成所有事情。

在使用text属性之前,你可能想要检查加载的XML(查找parseError),并且objSite有一个正确的子元素(例如Name,Dir)。

Set xmlDoc = CreateObject("Microsoft.XMLDOM")

xmlDoc.Async = "False"
xmlDoc.Load("test.xml")
Set colNodes = xmlDoc.selectNodes ("//Site")
Dim strName
Dim strDir
WScript.Echo "Start"
For Each objSite in colNodes
    strName = objSite.selectSingleNode( "Name" ).text
    strDir = objSite.selectSingleNode( "Dir" ).text

    WScript.Echo "Test: " + strName + ":" + strDir
Next