Построение XML дерева из TreeView

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Хой
Не математик
Не математик
 
Сообщения: 541
Зарегистрирован: 26.08.2002 (Пн) 0:21
Откуда: Россия

Построение XML дерева из TreeView

Сообщение Хой » 11.01.2004 (Вс) 23:38

Повторюсь:
Построение XML дерева из TreeView....

т.е. я имею древовидную структуру TreeView (неограниченной вложенности) и мне нужно переобразовать эту структуру в XML-Tree
Помогите пожалуйста... :-)
*censored*

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 12.01.2004 (Пн) 18:18

Рекурсия тебе поможет, брат мой!

Код: Выделить всё
Private Sub BuildXML()
    Dim m_oDOM  As MSXML2.DOMDocument
    Dim oPi         As MSXML2.IXMLDOMProcessingInstruction
    Dim oElem       As MSXML2.IXMLDOMElement
   
    Set m_oDOM = New MSXML2.DOMDocument
    'add the XML processing instruction
    Set oPi = m_oDOM.createProcessingInstruction("xml", "version=""1.0"" encoding=""ISO-8859-1""")
    m_oDOM.appendChild oPi

    'add document element
    Set oElem = m_oDOM.createElement("TREE")
    m_oDOM.appendChild oElem

    Call AddNodeToDOM(TreeView1.Nodes(0).Root, m_oDOM.documentElement)
End Sub

Private Sub AddNodeToDOM(ByVal theNode As Node, _
            ParentNode As MSXML2.IXMLDOMElement)
    'Recursively adds all children of this node to DOM
    Dim oNode     As Node
    Dim oElem       As MSXML2.IXMLDOMElement
   
    'add child nodes of current node
    For Each oNode In theNode.Children
        Set oElem = FolderNode(oNode, ParentNode)
        'recursion occurs here
        Call AddNodeToDOM(oNode, oElem)
    Next
End Sub

Private Function FolderNode(ByVal the Node As Node, _
            ParentNode As MSXML2.IXMLDOMElement) As MSXML2.IXMLDOMElement
    'adds empty node for the treeview node and returns it
    Dim oElem       As MSXML2.IXMLDOMElement
   
    Set oElem = m_oDOM.createElement("FOLDER")
    oElem.setAttribute "name", theNode.Text
    ParentNode.appendChild oElem
    Set FolderNode = oElem
End Function


Я увы, не проверял этот код - переделал свой старый, так что смотри в оба! (Надо же и тебе поработать!) :wink:

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 15.01.2004 (Чт) 15:45

Может это, конечно, уже никому и не надо :cry: , но всё равно должен извиниться. Когда писал, не посмотрел на объектную модель, и не заметил, что коллекции детей у узла нет... :oops:

Правильнее будет перебор узлов сделать так:
Код: Выделить всё
Private Sub AddNodeToDOM(ByVal theNode As Node, _
            ParentNode As MSXML2.IXMLDOMElement)
    'Recursively adds all children of this node to DOM
    Dim oNode     As Node
    Dim oElem     As MSXML2.IXMLDOMElement
   
    'add child nodes of current node
    Set oNode = theNode.Child
    Do Until oNode = Nothing
        Set oElem = FolderNode(oNode, ParentNode)
        'recursion occurs here
        Call AddNodeToDOM(oNode, oElem)
        Set oNode = oNode.Next
    Loop
End Sub

А вообще, конечно, рекурсия - незаменимая вещь, когда работаешь с деревьями!
Изображение Вопросы - рёбрами!

Хой
Не математик
Не математик
 
Сообщения: 541
Зарегистрирован: 26.08.2002 (Пн) 0:21
Откуда: Россия

Сообщение Хой » 15.01.2004 (Чт) 16:05

Благодорю...... не, действительно ты сильно мне помог (даже почти всё сам за меня написал :-)
*censored*


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот и гости: 2

    TopList