TreeView a XML   zodpovězená otázka

XML, WinForms

Existuje nějaká funkce jak XML vložit d TreeViewu?

Mám XML kód třeba v tomhle tvaru

<?xml version="1.0" encoding="utf-8"?>
<zbozi>

  <vyrobek id="1" uzel="1" poduzel="0" popis="Krabice">
    <nazev>Krabice</nazev>
    <popis>Zde jsou různé výrobky</popis>
  </vyrobek>

  <vyrobek id="2" uzel="1" poduzel="1" popis="Krabice velikost 1">
    <nazev>Velikost 1</nazev>
    <popis>Krabice o velikosti 1</popis>
  </vyrobek>

</zbozi>

uzel značí číslo kořenového uzlupoduzel značí podřízený uzel kořenového uzle

Ještě lepší by to bylo kdyby se pozice v TreeView zapsala třeba jako 2.3.2.

Jde ubec do TreeView zapisovat takhle, že napíšu číslo (jméno) uzle a do něj přidám poduzel?

Díky všem za případné objasnění. Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět

obavam se, ze to automaticky nepujde. Ale klasicky si otevrit XML treba pres XML DOM, prochazet jej a na jeho zaklade plnit Treeview.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Toho jsem se obával. Jde mi spíš o to jak jednoduše vyplnit TreeView. Když bych měl třeba soubor ve tvaru

kategorie1
-podkategorie1
-podkategorie2
--podkategorie1
Kategorie2
-podkategorie1
-podkategorie2

Četl jsem příspěvek "Praca s TreeView" tady na fóru a nevím jak automaticky vytvářet toto:

'Vytvořit kořenový uzel
Dim rootNode As TreeNode = TreeView1.Nodes.Add("1", "1")
'Vytvořit podřízený uzel
Dim childNode As TreeNode = rootNode.Nodes.Add("10", "1.0")

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Na tohle je potřeba rekurze, prostě si uděláte proceduru, která na vstup dostane kolekci položek, pro každou z nich vytvoří a přidá do stromu TreeNode a navíc zavolá sama sebe na kolekci svých potomků, kteří musí přidávat položky pod tu otcovskou. Vypadat by to mohlo nějak takto (píšu z hlavy, takže tam budou chyby):

Sub CreateNodes(TreeNodeCollection parentCollection, XmlNodeCollection xmlNodes)
    'projít všechny položky z kolekce XML elementů
    For Each node As XmlNode in xmlNodes
        'vytvořit rodičovskou položku
        Dim treeNode As TreeNode = parentCollection.Add(...)
        'pokud má daný XML element nějaké potomky, zavolat se rekurzivně na potomky a přidat je do právě vytvořené položky
        If node.HasChildNodes Then
            CreateNodes(treeNode.Nodes, node.ChildNodes)
        End If
    Next
End Sub

Tuto funkci pak zavoláte nějak takto (v proměnné xmlDoc máte načtený XmlDocument ze vstupu:

CreateNodes(TreeView1.Nodes, xmlDoc.DocumentNode.ChildNodes)
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Velice děkuji. Vyzkouším to a uvidím jak dál :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě další varianta :


Function XmlToNode(ByRef xml As XmlNode) As TreeNode
        Dim ret As New TreeNode(xml.Name)
        If xml.HasChildNodes Then
            For Each i As XmlNode In xml.ChildNodes
                ret.Nodes.Add(XmlToNode(i))
            Next
        End If
        Return ret
    End Function

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback