Страница 1 из 1

из XML в VB

СообщениеДобавлено: 19.01.2007 (Пт) 19:26
Santa
Код: Выделить всё
<?xml version="1.0" encoding="KOI8-R"?>
<res>
<msg Id="28.11.1980">рТПЧЕТЛБ</msg>
</res>


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

СообщениеДобавлено: 19.01.2007 (Пт) 19:37
tyomitch
Код: Выделить всё
Dim x As New DOMDocument
x.Load "test.xml"
Debug.Print x.selectSingleNode("/res/msg[@Id='28.11.1980']").Text

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

СообщениеДобавлено: 20.01.2007 (Сб) 9:58
schalexey
Santa
x.selectNodes("/res/msg")
И потом перебирай коллекцию через Each

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

СообщениеДобавлено: 20.01.2007 (Сб) 12:27
Santa
Содержимое тега получилось вытащить, а параметр ид нет. :(

СообщениеДобавлено: 20.01.2007 (Сб) 12:46
_ae_
IXMLDOMNode.attributes("id")

СообщениеДобавлено: 21.01.2007 (Вс) 18:36
Santa
Все получается! Только как теперь узнать что страница загрузилась?readyState всегда 4 когда начинается загрузка 3 а когда кончается опять 4. А как оформить не соображу?

СообщениеДобавлено: 22.01.2007 (Пн) 11:10
RayShade
Поставь .async = false и все :)

СообщениеДобавлено: 24.01.2007 (Ср) 1:21
Santa
RayShade писал(а):Поставь .async = false и все :)

ERROR: Attempt to modify a read-only node.

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

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

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

СообщениеДобавлено: 13.02.2007 (Вт) 21:40
Ennor
Данный текст не будет являться валидным 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

СообщениеДобавлено: 15.02.2007 (Чт) 14:57
Santa
Нет, это VB 5.0.
parseError то самое чего не хватало, спасибо. Только он долго не хотел работать, оказалось нужен был async = false и от моей комбинации пришлось отказаться.