2013-10-05 2 views
1

Ниже описана структура моего файла XML:SelectSingleNode с помощью VBScript

<configuration> 
    <appSettings> 
    <add key="ProductVersion" value="5.5.5"/> 
    <add key="LogsDirectory" value="e:\\Logs"/> 
    </appSettings> 
<configuration> 

Я пытаюсь следующий код, чтобы получить значение из LogsDirectory:

configurationFilePath = "e:\conf.xml" 
Set xmlDoc = CreateObject("MSXML2.DomDocument.6.0") 
xmlDoc.async = false 
Call xmlDoc.load(configurationFilePath) 

xpath1 = ".//configuration/appSettings/add[@key='LogsDirectory']/@value" 
LogsDirectory = xmlDoc.selectSingleNode(xpath1) 

Но он дает ошибку при необходимости объект.

Любая помощь очень ценится.

Благодаря

ответ

2

Люди, которые не используют ошибку проверки скелет для XML-работы, как это:

Option Explicit 

Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject") 
Dim sFSpec : sFSpec = oFS.GetAbsolutePathName(".\19194544.xml") 
Dim oXDoc : Set oXDoc = CreateObject("MSXML2.DomDocument.6.0") 
oXDoc.setProperty "SelectionLanguage", "XPath" 
oXDoc.async = False 
oXDoc.load sFSpec 

If 0 = oXDoc.ParseError Then 
    WScript.Echo sFSpec, "looks ok" 
    Dim sXPath 
    For Each sXpath In Array(_ 
     ".//configuration/appSettings/add[@key='LogsDirectory']/@value" _ 
    ) 
     Dim ndFnd : Set ndFnd = oXDoc.selectSingleNode(sXpath) 
     If Not ndFnd Is Nothing Then 
      WScript.Echo "found |" & ndFnd.xml & "|" 
     Else 
      WScript.Echo "not found |" & sXPath & "|" 
     End If 
    Next 
Else 
    WScript.Echo oXDoc.ParseError.Reason 
End If 

также делать банджи-джампинг без веревок.

В вашем случае .ParseError.Reason

The following tags were not closed: configuration, configuration. 

объясняет, почему нет ни одного документа для поиска. По крайней мере, это избавляет вас ошибку вы могли бы получить при попытке назначить узел вернулся из. selectSingleNode() в LogsDirectory без использования Set.