Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > XML в TreeView


Автор: Iww 23.1.2009, 23:57
Что должна делать программа: читать XML файл и записывать его в объект TreeView... 
C первой частью вроде всё нормально, но вот непонимаю как записать каждую группу в отдельную ветку в TreeView, предостовляю код:

Код


Private m_hwndTV As Long



Private Sub Command1_Click()
     Dim objXML As MSXML2.DOMDocument
     Dim strXML As String
     Dim x As String
     Set objXML = New MSXML2.DOMDocument
     objXML.Load ("Путь к файлу")
     
     Open "Путь к фалу" For Input As 1
     Line Input #1, x
     x = Mid(x, 2, Len(x) - 2)
     Text2.Text = x
  
         For Each objSub In objXML.selectNodes("//" & x)
             Text1.Text = objSub.xml
         Next
         
     Dim i As Integer
     Dim nod As Node
     
       With TreeView1
         .HideSelection = False
         .Indentation = 10 * Screen.TwipsPerPixelX
         .LabelEdit = tvwManual
         .LineStyle = tvwRootLines
         m_hwndTV = .hWnd
     End With


  Set objElem = objXML.selectSingleNode("//" & x)
  
    For Each objSub In objElem.childNodes
    
      Set nod = TreeView1.Nodes.Add(, , , "имя родителя, которое я не знаю как найти")
      Call AddChildrenNodes(nod.Index, 1, "имя ребёнка, которое я не знаю как найти")
      Call SetNodeButton(nod, True)
      nod.Expanded = True
    Next
    TreeView1.Nodes(1).Selected = True
    
Close #1
End Sub



Private Sub AddChildrenNodes(iParent As Integer, nNodes As Integer, name As String)
  Dim nodeChild  As Node
  Dim i As Integer
  
  For i = 1 To nNodes
    Set nodeChild = TreeView1.Nodes.Add(iParent, tvwChild, , name & i)
    Call SetNodeButton(nodeChild, False)
  Next

End Sub

Private Function SetNodeButton(nod As Node, fAddButton As Boolean) As Boolean
  Dim hItem As Long
  
  hItem = GetTVItemFromNode(m_hwndTV, nod)
  If hItem Then
    SetNodeButton = SetTVItemButton(m_hwndTV, hItem, fAddButton)
  End If

End Function




Спасибо заранее.

Автор: Akina 25.1.2009, 21:34
Цитата(Iww @  24.1.2009,  00:57 Найти цитируемый пост)
имя родителя, которое я не знаю как найти

Имена ты или даёшь сам (скажем тривиальный счётчис), или они у тебя содержатся в самом XML (не рекомендую). А раз ты их сам даёшь - ты всеих знаешь.

Автор: Iww 26.1.2009, 17:41
Цитата(Akina @ 25.1.2009,  21:34)
...или они у тебя содержатся в самом XML (не рекомендую)


Они как раз-то в XML и содержатся... вся идея программы построена на том чтобы считывать данные с XML файла и строить из этого дерево... 
Есть ли какой-нибудь альтернативный способ считывать данные с *.xml файлов?? 

Автор: Akina 26.1.2009, 17:55
Цитата(Iww @  26.1.2009,  18:41 Найти цитируемый пост)
Они как раз-то в XML и содержатся... вся идея программы построена на том чтобы считывать данные с XML файла и строить из этого дерево... 

Ты не понял. Я к тому, что использовать имена XML-данных в качестве идентификаторов узлов нельзя - хотя бы из-за проблемы дублирования.

Цитата(Iww @  26.1.2009,  18:41 Найти цитируемый пост)
Есть ли какой-нибудь альтернативный способ считывать данные с *.xml файлов?? 

 smile оно тебе зачем?

Автор: Iww 26.1.2009, 21:48
Цитата(Akina @  26.1.2009,  17:55 Найти цитируемый пост)
Ты не понял. Я к тому, что использовать имена XML-данных в качестве идентификаторов узлов нельзя - хотя бы из-за проблемы дублирования.

Дак должны же быть какие-нибудь функции которые считывают каждую группу xml файла отдельно.

Цитата(Akina @  26.1.2009,  17:55 Найти цитируемый пост)
  оно тебе зачем? 

непонял вопроса... А как иначе я буду дерево строить ?

Автор: Akina 26.1.2009, 22:19
Цитата(Iww @  26.1.2009,  22:48 Найти цитируемый пост)
должны же быть какие-нибудь функции которые считывают каждую группу xml файла отдельно.

Цитата

Installing Microsoft® Internet Explorer 5.0 and later on the server installs the msxml.dll, which contains all the components of the XML engine, including the Microsoft XML Parser (MSXML), the Extensible Stylesheet Language (XSL) processor, schema support, and so on.

Instantiate the XML control the way you would any other control on the server. For example, from an Active Server Pages (ASP) page you would use code like the following.

Код

var xObj = Server.CreateObject("msxml2.DOMDocument");

см. также, например, Q271621.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)