из XML в VB

Если название форума вам о чём-то говорит, то значит, внутри вы найдете что-то для себя полезное.
Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

из XML в VB

Сообщение Santa » 19.01.2007 (Пт) 19:26

Код: Выделить всё
<?xml version="1.0" encoding="KOI8-R"?>
<res>
<msg Id="28.11.1980">рТПЧЕТЛБ</msg>
</res>


Как из файла с этим содержимым вытащить данные ч/з xml библиотеку в ВБ?
SIVIS PACEM PARA BELLUM

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.01.2007 (Пт) 19:37

Код: Выделить всё
Dim x As New DOMDocument
x.Load "test.xml"
Debug.Print x.selectSingleNode("/res/msg[@Id='28.11.1980']").Text
Изображение

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 20.01.2007 (Сб) 0:37

Да, спасибо!
Только пример показывает что внутри тега мсг,
а если у мсг не один параметр ид а есть и др.
Сам ид в мсг тоже не известен, как быть если ид не единственный параметр, то как узнать значение других?
мсг не один, есть и др. у каждого по 2-3 таких как ид и их тоже надо узнать. Я упростил пример, если надо (необходимо) для точности и ясности могу весь XML выложить.
Очень нужна помошь!
SIVIS PACEM PARA BELLUM

schalexey
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 18.02.2005 (Пт) 17:41
Откуда: Сургут

Сообщение schalexey » 20.01.2007 (Сб) 9:58

Santa
x.selectNodes("/res/msg")
И потом перебирай коллекцию через Each

PS selectNodes вроде такой метод... сейчас VB под боком нет

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 20.01.2007 (Сб) 12:27

Содержимое тега получилось вытащить, а параметр ид нет. :(
SIVIS PACEM PARA BELLUM

_ae_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 165
Зарегистрирован: 08.10.2006 (Вс) 14:37

Сообщение _ae_ » 20.01.2007 (Сб) 12:46

IXMLDOMNode.attributes("id")

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 21.01.2007 (Вс) 18:36

Все получается! Только как теперь узнать что страница загрузилась?readyState всегда 4 когда начинается загрузка 3 а когда кончается опять 4. А как оформить не соображу?
SIVIS PACEM PARA BELLUM

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 22.01.2007 (Пн) 11:10

Поставь .async = false и все :)

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 24.01.2007 (Ср) 1:21

RayShade писал(а):Поставь .async = false и все :)

ERROR: Attempt to modify a read-only node.

Вставил так, помогло:
Код: Выделить всё
Do While x.readyState <> 4
  DoEvents
Loop
SIVIS PACEM PARA BELLUM

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 13.02.2007 (Вт) 11:35

Еще одна проблемка. Иногда, когда сервер перегружен он ворачивает только одну строку:
Код: Выделить всё
пЫЙВЛБ УПЕДЙОЕОЙС У ВБЪПК: DB Error: connect failed

Как её вычитать? x.xml и x.text пусто :(
SIVIS PACEM PARA BELLUM

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 13.02.2007 (Вт) 21:40

Данный текст не будет являться валидным XML. Во-первых, можешь проверять результат, возвращаемый методом LoadXML() (или как ты его загружаешь?..) - это Boolean. Во-вторых, можешь проверять свойство parseError.ErrorCode объекта DOMDocument:
Код: Выделить всё
Dim xmlDoc As New Msxml2.DOMDocument30
xmlDoc.async = False
xmlDoc.loadXML ("<customer>" & _
                "<first_name>Joe</first_name>" & _
                "<last_name>Smith</last_name></customer>")
If (xmlDoc.parseError.errorCode <> 0) Then
   Dim myErr
   Set myErr = xmlDoc.parseError
   MsgBox("You have error " & myErr.reason)
Else
   MsgBox xmlDoc.xml
End If

В примере, судя по всему, используется VB.NET, но в данном случае разница не должна помешать тебе разобраться.

Ссылка в MSDN 2005:
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/xmlsdk/html/19957329-69cd-456a-876f-7d2b692b0afc.htm

Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Сообщение Santa » 15.02.2007 (Чт) 14:57

Нет, это VB 5.0.
parseError то самое чего не хватало, спасибо. Только он долго не хотел работать, оказалось нужен был async = false и от моей комбинации пришлось отказаться.
SIVIS PACEM PARA BELLUM


Вернуться в XML/XSL/XHTML

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList