0

给定以下 XML 文件:

 <packages>
 <package name="Library">
 <distributionPoints>
  <distributionPoint path="http://SERVER001/SMS_DP_SMSPKGD$/CEN0003B/" /> 
  <distributionPoint path="http://SERVER002/SMS_DP_SMSPKGD$/CEN0003B/" /> 
  </distributionPoints>

 <package name="SystemFiles">
 <distributionPoints>
  <distributionPoint path="http://SERVER001/SMS_DP_SMSPKGD$/CEN00262/" /> 
  <distributionPoint path="http://SERVER002/SMS_DP_SMSPKGD$/CEN00262/" /> 
  </distributionPoints>
  </package>
</packages>

我正在调用以下函数以从“SystemFiles”节点检索信息:“http://SERVER001/SMS_DP_SMSPKGD$/CEN00262/”“http://SERVER002/SMS_DP_SMSPKGD$/CEN00262/”

我能够检索节点“SystemFiles”,但在尝试从其中检索信息时遇到问题。这是我的功能:

Function GetDistributionPath(packageName)
  Dim foundPackageName
  foundPackageName = false

  Set objXml = CreateObject("Microsoft.XMLDOM")
  If objXml.Load("Package.xml") Then
     WScript.Echo "loaded successfully."
  Else
     WScript.Echo "I was not able to load XML doc Package.xml!"
     WScript.Quit(1)
  End If

  Set packageNodes = objXml.documentElement.SelectNodes("//package")

  For Each packageNode in packageNodes
    If Not IsNull(packageNode.getAttribute("name"))  Then
          name = packageNode.getAttribute("name")
    End If

    If name = packageName Then
       foundPackageName = true

       'Get the DistributionPoint Paths
       'THIS CODE BELOW IS NOT WORKING <===== 

       'Set distributionPointNodes = packageNode.SelectNodes("//distributionPoint")
       'For Each distributionPointNode in distributionPointNodes
       '    distributionPointName = distributionPointNode.getAttribute("path")
       '    WScript.Echo "path: " & distributionPointName
       'Next

       Exit For
    End If
  Next
  Set objXml = Nothing

  If Not foundPackageName Then
    WScript.Echo "I could not find package name " & packageName & " in Package.xml!"
    WScript.Quit(1)
  End If   
End Function

'Other approache did not work as well
'Set objNode = objXml.selectSingleNode("packages/package[@name='SystemFiles']")
'WScript.Echo "Path: " & objNode.getAttribute("path")
4

1 回答 1

1

您发布的 .XML 格式不正确(缺少</package>)。你没有说标准策略是什么方式:

  Dim oFS    : Set oFS  = CreateObject("Scripting.FileSystemObject")
  Dim sFSpec : sFSpec   = oFS.GetAbsolutePathName("..\data\01.xml")
  Dim oXML   : Set oXML = CreateObject("Msxml2.DOMDocument")
  oXML.setProperty "SelectionLanguage", "XPath"
  oXML.async = False
  oXML.load sFSpec
  If 0 = oXML.parseError Then
     WScript.Echo oXML.xml
     WScript.Echo "-----------------"
     Dim sXPath : sXPath    = "/packages/package[@name='SystemFiles']"
     Dim ndFnd  : Set ndFnd = oXML.selectSingleNode(sXPath)
     If ndFnd Is Nothing Then
        WScript.Echo sXPath, "not found"
     Else
        WScript.Echo ndFnd.nodeName, ndFnd.getAttribute("name")
        WScript.Echo "-----------------"
        sXPath = "distributionPoints/distributionPoint"
        Dim ndlPoint  : Set ndlPoint = ndFnd.SelectNodes(sXPath)
        If 0 < ndlPoint.length Then
           Dim ndPath
           For Each ndPath In ndlPoint
               WScript.Echo ndPath.getAttribute("path")
           Next
        Else
           WScript.Echo sXPath, "not found"
        End If
     End If
  Else
     WScript.Echo oXML.parseError.reason
  End If

输出:

<packages>
        <package name="Library">
                <distributionPoints>
                        <distributionPoint path="http://SERVER001/SMS_DP_SMSPKGD$/CEN0003B/"/>
                        <distributionPoint path="http://SERVER002/SMS_DP_SMSPKGD$/CEN0003B/"/>
                </distributionPoints>
        </package>
        <package name="SystemFiles">
                <distributionPoints>
                        <distributionPoint path="http://SERVER001/SMS_DP_SMSPKGD$/CEN00262/"/>
                        <distributionPoint path="http://SERVER002/SMS_DP_SMSPKGD$/CEN00262/"/>
                </distributionPoints>
        </package>
</packages>

-----------------
package SystemFiles
-----------------
http://SERVER001/SMS_DP_SMSPKGD$/CEN00262/
http://SERVER002/SMS_DP_SMSPKGD$/CEN00262/

不适合你。所以你必须检查自己,你的变通方法离开了美德之路。

于 2013-01-15T07:09:32.510 回答