Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / msxml, Как узнать, что запрошенного элемента нет? / 8 сообщений из 8, страница 1 из 1
05.03.2008, 14:45
    #35172955
Eric-S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
msxml, Как узнать, что запрошенного элемента нет?
Вопрос про msxml. Есть у меня функция, которая возвращает текст из элемента.
Всё нормально работает, когда элемент есть, а вот когда его нет, выскакивает ошибка.
Я конечно могу грубо обрабатывать ошибки, но мне не хотелось бы поступать таким образом.

Код: plaintext
1.
2.
3.
4.
5.
6.
' получение значения параметра
Public Function GetParam(ByVal Key As String) As String
Dim e As IXMLDOMElement
Set e = xmlDoc.selectSingleNode("//book_info/" + Key)
GetParam = e.Text
End Function

Подскажите, пожалуйста, как узнать, что запрошенного элемента нет и просто вернуть пустую строку.

isObject(e) всегда возвращает true
e.parseError возвращает 0

Но на строке
getParam = e.text
Выскакивает ошибка, что объект не определён.
...
Рейтинг: 0 / 0
05.03.2008, 15:13
    #35173056
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
msxml, Как узнать, что запрошенного элемента нет?
Код: plaintext
e is Nothing
?


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
05.03.2008, 16:08
    #35173276
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
msxml, Как узнать, что запрошенного элемента нет?
Может, сначала так:

Dim e As New IXMLDOMElement

Но я не проверял?
...
Рейтинг: 0 / 0
05.03.2008, 20:13
    #35173942
Eric-S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
msxml, Как узнать, что запрошенного элемента нет?
Не думаю, что очень важно как объявляется. Если элемент есть, то всё прекрасно работает.
Ошибка же только, когда элемента нет.

Вот например у меня в файле
<root>
<my1>hello!</my1>
</root>

Когда я запрашиваю /root/my1, то всё ок
А когда же я запрашиваю /root/my2, то ошибка
мне эта ошибка жить мешает!

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

а onerror думаю нужно использовать на самый крайний случай. Но без него мне не справится с этим глюком.
...
Рейтинг: 0 / 0
05.03.2008, 20:33
    #35173958
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
msxml, Как узнать, что запрошенного элемента нет?
> Автор: Eric-S
> Вопрос про msxml. Есть у меня функция, которая возвращает текст из
> элемента.
> Всё нормально работает, когда элемент есть, а вот когда его нет,
> выскакивает ошибка.
> Я конечно могу грубо обрабатывать ошибки, но мне не хотелось бы
> поступать таким образом.

А с каких пор обработка ошибок стала игнорироваться и отвергатся
разработчиком?

> ' получение значения параметра
> Public Function GetParam(ByVal Key As String) As String

GetParam = vbNullString 'Или присваивай что хочешь, например "Куда прёшь!!!
Не видишь параметра нет!"

> Dim e As IXMLDOMElement

On Error Resume Next

> Set e = xmlDoc.selectSingleNode("//book_info/" + Key)
> GetParam = e.Text
> End Function

А теперь посмотри с 2 часов дня до 7 часов вечера, ты убил на какой-то бред,
который решается двумя строчками

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
06.03.2008, 13:06
    #35175372
Eric-S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
msxml, Как узнать, что запрошенного элемента нет?
Ну не 5 часов. А скажем минут 5.
У меня уже была написана и работала очень похожая функция с обработкой ошибок, правда я конкретно вылавливаю err.no = 91.

Но я спрашивал именно об определении через msxml. Или других способах. Считаю, что ошибки нужно предупреждать заранее, а не исправлять их последствия.

Ввключать обработку ошибок на ранний стадии мне не очень нравится. Ошибка произошла, но из-за этих on error не очень даже понятна где и какая. А так мне сразу показывается строчка с ошибкой.
...
Рейтинг: 0 / 0
06.03.2008, 13:56
    #35175657
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
msxml, Как узнать, что запрошенного элемента нет?
А надо включать голову, а не обработчики.
Код: plaintext
1.
2.
3.
4.
Public Function GetParam(ByVal Key As String) As String
Dim e As IXMLDOMElement
Set e = xmlDoc.selectSingleNode("//book_info/" + Key)
If Not e Is Nothing Then GetParam = e.Text
End Function
...
Рейтинг: 0 / 0
07.03.2008, 11:00
    #35177706
Eric-S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
msxml, Как узнать, что запрошенного элемента нет?
Antonariy, вы обсалютно правы на счёт обработчиков, я использовал их только как вынужденное средство.
Включать голову? Ха! Я только предпологал, что есть конструкция для проверки объекта, вот поэтому и спросил.

Вобщем мой респект!
Наконец-то добрался до этой функции, исправил, и всё заработало на ура!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / msxml, Как узнать, что запрошенного элемента нет? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]