powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB & XML
6 сообщений из 6, страница 1 из 1
VB & XML
    #32442788
Nadejda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация следующая. Считываю данные из XML, заношу в ListView. При событии listView_ItemClick информация по данным в Item (по ID) отображается в TextBox и Label. Вопрос в следующем - как обрабатывать ситуацию отсутсвия какого-либо узла в XML-документе или информации в нем? Заранее спасибо. На всякий случай приведу код:
sub form_load()
Dim li As ListItem
Dim a As New MSXML.DOMDocument
a.loadXML str
lvFind.ListItems.Clear
Dim b
Set b = a.getElementsByTagName("O5")
For Each Key In b
Set li = lvFind.ListItems.Add(, "ID" & Key.selectSingleNode("@id").Text, Key.selectSingleNode("./pTabNum").Text)
li.SubItems(1) = StrConv(StrConv(Key.selectSingleNode("./pFam").Text, vbLowerCase), vbProperCase)
li.SubItems(2) = StrConv(StrConv(Key.selectSingleNode("./pIm").Text, vbLowerCase), vbProperCase)
li.SubItems(3) = StrConv(StrConv(Key.selectSingleNode("./pOtch").Text, vbLowerCase), vbProperCase)
Next
end sub

Private Sub lvFind_ItemClick(ByVal Item As MSComctlLib.ListItem)

Dim Detail As New MSXML.DOMDocument
Detail.loadXML str

Dim bb
Set bb = Detail.getElementsByTagName("O5")
For Each Key In bb
lblDateRojd(0).Caption = Key.selectSingleNode("./pDatBth").Text
lblTypeDoc(0).Caption = Key.selectSingleNode("./O13/pDocType").Text
lblSeriy(0).Caption = Key.selectSingleNode("./O13/pDocSer").Text
lblNomer(0).Caption = Key.selectSingleNode("./O13/pDocNum").Text
lblSex(0).Caption = Key.selectSingleNode("./pSex").Text
Next
End Sub
...
Рейтинг: 0 / 0
VB & XML
    #32443669
Nadejda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эх, вопрос что ли неточно задала...... Или ни у кого не возникало таких проблем?
...
Рейтинг: 0 / 0
VB & XML
    #32443846
Фотография Alviga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению не проверял.
Но после прочтения MSDN появилась вот такая мысль
if NOT isNull(Key.selectSingleNode("./pDatBth"))
lblDateRojd(0).Caption = Key.selectSingleNode("./pDatBth").Text
endif
...
Рейтинг: 0 / 0
VB & XML
    #32772265
Yuriy Goodz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно попробовать поюзать XPATH. Его можно использовать например в методе SelectNodes. А потом анализировать список нод.

nodes = xmldoc.selectnodes("//pSex") - выбрать ноду pSex из любого уровня.

Можно еще попробовать работать с XML схемой, накладывать ее на обрабатываемый XML-док и смотреть что получится. Схема поможет проверить корректность данных.
...
Рейтинг: 0 / 0
VB & XML
    #32772284
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuriy Goodz
Можно еще попробовать работать с XML схемой, накладывать ее на обрабатываемый XML-док и смотреть что получится. Схема поможет проверить корректность данных. Именно так. Описывается XSD схема, на которую в самом файле XML ставится ссылка.Тогда при загрузке XML на этапе Detail.loadXML str возникает ошибка в случае несоответствия XML XSD схеме
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
VB & XML
    #35149472
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понял, к чему вы пришли.
Анализировать список нод мне не очень подходит, хотя можно. А вот схема не сработает. Да и нет её.
У меня такая заморочка, нужно создать элемент в узле, которого может ещё и не быть.

Так вот, не пойму, как проверить есть ли узел или нет. Если узел есть, то всё ок. Элемент добавляется, а если его нет, то ругается на то, что переменная не определена. Как я понял, это моя edir1. Она то и должна быть узлом, которого и нет.
Как узнать, что переменная не определена?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Public Sub addTopic(titleNew As String)
добавление раздела

' выделяем раздел
Dim edir1 As IXMLDOMElement
Set edir1 = xmlDoc.selectSingleNode(selectionElement)

If IsNull(edir1) Then
MsgBox "предположительно узел не найден!"

Else

' новый идентификатор
Dim newId As Long
newId = last +  1 
last = newId

' создание нового узла
Dim etitle1 As IXMLDOMElement
Set etitle1 = edir1.appendChild _
(xmlDoc.createElement("title"))
etitle1.setAttribute "id", newId
etitle1.Text = titleNew

End If
End Sub
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB & XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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