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/」

ノード「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 に答える