Страница: 1 | 2 |
Вопрос: Подскажите как правильно извлекать данные из XML
Добавлено: 17.03.09 12:46
Автор вопроса: KreAtoR
Сижу в VB6 и достаю из xml данные. делаю это пока что очень плохим способом и он не всегда работает. поэтому прошу подсказать как правильно работать с xml в vb6
вот мой примерчик
Dim i As Long
Dim arrFirst(1) As String
Dim arrSecond(1) As String
Dim arrThird(1) As String
Dim arrFourth(1) As String
Dim xmlString As String
Dim arrString() As String
Dim arrStringTmp() As String
arrFirst(0) = "<" & first & ">"
arrFirst(1) = "</" & first & ">"
arrSecond(0) = "<" & second & ">"
arrSecond(1) = "</" & second & ">"
arrThird(0) = "<" & third & ">"
arrThird(1) = "</" & third & ">"
arrFourth(0) = "<" & fourth & ">"
arrFourth(1) = "</" & fourth & ">"
On Error GoTo exitRead
Dim XMLParser As DOMDocument30
Dim xNode As IXMLDOMElement
Set XMLParser = New DOMDocument30
XMLParser.Load App.Path & "\" & file & ".xml"
For Each xNode In XMLParser.documentElement.childNodes
If xNode.baseName = first Then
xmlString = xNode.xml
arrString = Split(xmlString, arrFirst(0))
arrStringTmp = Split(arrString(1), arrFirst(1))
'MsgBox arrStringTmp(0)
ReadXML = arrStringTmp(0)
If second <> "" Then
arrString = Split(arrStringTmp(0), arrSecond(0))
arrStringTmp = Split(arrString(1), arrSecond(1))
'MsgBox arrStringTmp(0)
ReadXML = arrStringTmp(0)
Else
End If
If third <> "" Then
arrString = Split(arrStringTmp(0), arrThird(0))
arrStringTmp = Split(arrString(1), arrThird(1))
'MsgBox arrStringTmp(0)
ReadXML = arrStringTmp(0)
Else
End If
If fourth <> "" Then
arrString = Split(arrStringTmp(0), arrFourth(0))
arrStringTmp = Split(arrString(1), arrFourth(1))
'MsgBox arrStringTmp(0)
ReadXML = arrStringTmp(0)
Else
End If
Else
End If
Next xNode
Exit Function
exitRead:
ReadXML = ""
End Function
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #1
Добавлено: 17.03.09 15:04
Отжыг
а nodeTypedValue от xNode не берешь по религиозным соображениям?
Номер ответа: 2
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #2
Добавлено: 17.03.09 15:05
@LamerOnLine дай лучше пример чем смееяться
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 17.03.09 15:08
и не забывай что у xNode вполе тоже могут быть ChildNodes, так что рекурсия тебе поможет
Номер ответа: 4
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #4
Добавлено: 17.03.09 16:32
я понять не могу как мне childs найти уже все пааметры перепробовал.
Номер ответа: 5
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #5
Добавлено: 17.03.09 18:03
дай лучше xml чем голословно что-то объяснять
Потому как общую теорию по xml мне рассказывать времени нет
Номер ответа: 6
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #6
Добавлено: 17.03.09 18:09
а вообще не стесняйся юзать .selectNodes() и .nodeTypedValue
Я так понял тебе как раз надо найти определенные ноды и взять их значения.
Номер ответа: 7
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #7
Добавлено: 17.03.09 19:05
это сам файл
я читаю его обрезая стринг, но если в тегах поподаются одинаковые названия, хоть и на нижних уровнях, то читается не то что надо.
@LamerOnLine а куда их засунуть надо?
Номер ответа: 8
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #8
Добавлено: 18.03.09 10:56
Ничего обрезать не надо, все делает xml парсер.
Поясни что конкретно тебе надо из этого файла вытащить.
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 18.03.09 11:13
У тебя, похоже, в xml хранятся какие-то единичные настройки (в том смысле что ноды у тебя не повторяющиеся). Ну, для примера
Private Sub Form_Load()
Dim xmlDOC As New DOMDocument40
Dim xmlNode As IXMLDOMElement
xmlDOC.Load "d:\myxml.xml"
MsgBox "Parameter 'ServerName from your xml is " & _
xmlDOC.selectSingleNode("session/output/wme/push/servername".nodeTypedValue
End Sub
Номер ответа: 10
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #10
Добавлено: 18.03.09 11:15
Вместо смайла - скобка. Додумались вставить поддержку смайлов внутри тега CODE....
Номер ответа: 11
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #11
Добавлено: 18.03.09 11:40
Все сделал. выкладываю пример если кому понадобится.
XML Файл:
В проекте прикрепляем Microsoft XML 3.0
а это вставте куда нить на форму или в класс да вызовите.
Номер ответа: 12
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #12
Добавлено: 18.03.09 11:56
Мне кажется это ты спрашивал. Зачем этот пример другим?
Тем более что
1. В рефах ставишь xml3, а используешь dom4
2. У тебя в Adressen двое нодов-детишек Kontakt, ты же берешь нод через SingleNode
В общем, есть над чем поработать. Да и с выкладыванием примеров я бы не торопился
Номер ответа: 13
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #13
Добавлено: 18.03.09 12:02
Хотя забей. Работает - и ладно. Есть повод обмыть
Сорри за оффтоп, именно этим и занимаюсь...
Номер ответа: 14
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #14
Добавлено: 18.03.09 12:44
Все работает как надо. могу даже передать ID и так далее, очень удобно и легко.
вот ссылка на тему: http://www.activevb.de/tutorials/tut_msxml/msxml.html
Номер ответа: 15
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #15
Добавлено: 26.03.09 01:21
Додумались вставить поддержку смайлов внутри тега CODE....
Это устаревший тег. Используй [sоurce][/sоurce]