Как выбрать SingleNode в XML с VBScript и классическим ASP? - PullRequest
3 голосов
/ 30 августа 2011

С здесь : xml:

<Vocabulary> 
   <Word type="noun" level="1"> 
      <English>cat</English> 
      <Spanish>gato</Spanish> 
   </Word> 
   <Word type="verb" level="1"> 
      <English>speak</English> 
      <Spanish>hablar</Spanish> 
   </Word> 
   <Word type="adj" level="1"> 
      <English>big</English> 
      <Spanish>grande</Spanish> 
   </Word> 
</Vocabulary>

Я создал XML-файл и поместил его в тот же каталог, что и классический asp-файл:

    <%

    Set objXMLDoc = CreateObject("Microsoft.XMLDOM") 
    objXMLDoc.async = False 
    objXMLDoc.load("vocabulary.xml") 

    Set Node = objXMLDoc.documentElement.selectSingleNode("Word/Spanish")
    document.write(Node.text)

%>

НоЯ получаю это:

Ошибка выполнения Microsoft VBScript '800a01a8'

Требуется объект: 'objXMLDoc.documentElement'

/ so-rms / reports / xmltest.asp, строка 7

Что я делаю не так?Они получают элемент.Я получаю ошибку.Спасибо.

Редактировать: Я вставил это:

If objXMLDoc.parseError.errorCode <> 0 Then
    response.write objXMLDoc.parseError.errorCode & "ERROR CODE </br>"
    response.write  objXMLDoc.parseError.reason & "REASON CODE </br>"
    response.write  objXMLDoc.parseError.line & "LINE CODE </br>"
End If

и получил:

-2146697210ERROR CODE

Системная ошибка: -2146697210.REASON CODE

0LINE CODE, опробованный снизу:

dim path: path = Server.MapPath("vocabulary.xml")
dim fso: set fso = CreateObject("Scripting.FileSystemObject")
if not fso.FileExists(path) then
    Response.Write "path '" & path & "' not found"
end if
Set objXMLDoc = CreateObject("MSXML2.DOMDocument.3.0") 
objXMLDoc.async = False 

if not objXMLDoc.load("vocabulary.xml") then
    ' report loading error
     response.write "error"
end if
'objXMLDoc.load("vocabulary.xml") 
If objXMLDoc.parseError.errorCode <> 0 Then
    response.write objXMLDoc.parseError.errorCode & "ERROR CODE </br>"
    response.write  objXMLDoc.parseError.reason & "REASON CODE </br>"
    response.write  objXMLDoc.parseError.line & "LINE CODE </br>"
End If
Set Node = objXMLDoc.documentElement.selectSingleNode("Word/Spanish")
document.write(Node.text)

EDIT:

Я также изменил XML-файл на URL-адрес рабочего XML-возврата (карты bing) иэто сработало.Итак, я думаю, это файл.Спасибо.

1 Ответ

5 голосов
/ 30 августа 2011

Я думаю, ваш документ XML не загружается.Метод load() возвращает bool, чтобы указать, правильно ли загружен файл, поэтому вы можете проверить

if not objXMLDoc.load("vocabulary.xml") then
    ' report loading error
end if

Свойство parseError также имеет свойство srcText, которое можно использовать для определениягде в файле возникла проблема разбора.

Также рекомендуется проверить, существует ли файл по указанному вами пути.Для этого используйте Server.MapPath() и Scripting.FileSystemObject:

dim path: path = Server.MapPath("vocabulary.xml")
dim fso: set fso = CreateObject("Scripting.FileSystemObject")
if not fso.FileExists(path) then
    Response.Write "path '" & path & "' not found"
end if

Кроме того, я рекомендую использовать более позднюю версию библиотеки XML, MSXML2.DomDocument

...