Почему я постоянно получаю объектные ошибки? - PullRequest
1 голос
/ 06 февраля 2010

Я вырезал и вставил этот пример из http://devguru.org/Technologies/xmldom/quickref/node_selectSingleNode.html

и я не могу заставить его работать.

Я продолжаю получать объектные ошибки, подобные этому:

Среда выполнения Microsoft VBScript (0x800A01A8) Требуется объект

Это код и XML-файл, который я использую

    <%
    option explicit

    Dim objXMLDoc

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

    Dim Node

Set Node = objXMLDoc.documentElement.selectSingleNode("label")
Response.write Node.text

%>

XML-файл

<?xml version="1.0" encoding="utf-8" ?>
    <labels>
        <label>Some label</label>
    </labels>

Ответы [ 2 ]

3 голосов
/ 06 февраля 2010

Я попробовал ваши коды, и это работает. Итак, есть две возможные причины, по которым я могу придумать.

  1. Ошибка генерируется из objXMLDoc.load, а не objXMLDoc.selectSingleNode, что означает, что файл XML не найден (или в доступе отказано?). Убедитесь, что путь к файлу действительно действителен и доступен. Попробуйте Response.write objXMLDoc.text, чтобы увидеть, можете ли вы получить что-нибудь, на нем тоже должно быть "Some label".

  2. Я просто догадываюсь, но это могло произойти из-за другой версии библиотеки "MSXML"

Если это не причина 1, вы можете попробовать следующий код (из ссылка MSDN ):

objXMLDoc.setProperty "SelectionLanguage", "XPath" 'add this line
Dim Node
Set Node = objXMLDoc.documentElement.selectSingleNode("//label") 'use //label
Response.write Node.text
3 голосов
/ 06 февраля 2010

Указанная ошибка, вероятно, на уровне последней строки. Если предположить, что все другие вызовы объекта XMLDOM работают без сбоев, selectSingleNode вернет ноль , поскольку "метка" в качестве пути не найдена.

Попробуйте с

Set Node = objXMLDoc.documentElement.selectSingleNode("labels/label")

вместо этого. В качестве альтернативы, и это хорошая практика с этим типом логики DOM, вы можете проверить успешность возврата из selectSingleNode

Set Node = objXMLDoc.documentElement.selectSingleNode("label")
If Node = Nothing
Ehen
   Response.Write  "Not found..."
Else
Response.Write Node.text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...