【发布时间】:2015-08-27 21:11:46
【问题描述】:
我正在尝试从 XML 文件填充 VB.NET 中的 TreeView 组件。这是一个很大的 XML 文件,我把它切碎了,以便让你们了解它的结构。我是 VB.NET 的新手,所以我很难弄清楚这一点。下面是我希望这些数据在 TreeView 中显示的顺序的图像,并且我添加了一些箭头,以便您了解数据在 XML 结构中应该来自哪里。
我找到并尝试修改从 Microsoft 教程中获得的代码,但它基于更简单的 XML 结构,并且不适用于我的文件。
图像中的箭头与 XML 标记和节点显示不同步,但我的目标是避免箭头和矩形相互重叠,使图片不可读。
当我们有一个名为“Cutter”的节点时,它是一种不同类型的组件,当前的“Cutter”或“Holder”节点中可能包含多个组件,因此它们由“Reference”标签分隔。如果它被命名为“Holder”,则它是工具堆栈上的另一种组件类型......每个新工具都以一个名为“Tool”的元素开头。
在图片下面我想在代码中做什么:
Private Sub btnSearchTLS_Click(sender As Object, e As EventArgs) Handles btnSearchTLS.Click
Try
' SECTION 1. Create a DOM Document and load the XML data into it.
Dim dom As New XmlDocument()
dom.Load(txtFileOpenTLS_2.Text)
' SECTION 2. Initialize the treeview control.
tviewToolIDs.Nodes.Clear()
tviewToolIDs.Nodes.Add(New TreeNode(dom.DocumentElement.Name))
Dim tNode As New TreeNode()
tNode = tviewToolIDs.Nodes(0)
' SECTION 3. Populate the TreeView with the DOM nodes.
AddNode(dom.DocumentElement, tNode)
tviewToolIDs.ExpandAll()
Catch xmlEx As XmlException
MessageBox.Show(xmlEx.Message)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub AddNode(ByRef inXmlNode As XmlNode, ByRef inTreeNode As TreeNode)
Dim xNode As XmlNode
Dim tNode As TreeNode
Dim nodeList As XmlNodeList
Dim i As Integer
' Loop through the XML nodes until the leaf is reached.
' Add the nodes to the TreeView during the looping process.
If inXmlNode.HasChildNodes() Then
nodeList = inXmlNode.ChildNodes
For i = 0 To nodeList.Count - 1
xNode = inXmlNode.(i)
inTreeNode.Nodes.Add(New TreeNode(xNode.Name))
tNode = inTreeNode.Nodes(i)
AddNode(xNode, tNode)
Next
Else
' Here you need to pull the data from the XmlNode based on the
' type of node, whether attribute values are required, and so forth.
inTreeNode.Text = (inXmlNode.OuterXml).Trim
End If
End Sub
这是 XML 文件:
<?xml version="1.0"?>
<ToolLibrary Version="7.3">
<Tools>
<Tool ID="100004" Units="Millimeter">
<Description>100004</Description>
<Teeth>1</Teeth>
<Type>Turning</Type>
<Cutter>
<Reference ID="12140 - N123G2-0318-0008">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Torneamento - Insertos paramétricos</ToolID>
<EntityName>12140 - N123G2-0318-0008</EntityName>
<Origin>
<X>34.2</X>
<Y>0</Y>
<Z>-82.3</Z>
</Origin>
<Rotation>
<X>0</X>
<Y>-90</Y>
<Z>0</Z>
</Rotation>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
</Cutter>
<Holder>
<Reference ID="12135 - C5-570-32-LF">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>12135 - C5-570-32-LF</EntityName>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="12139 - 570-32L123G18B130A">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>12139 - 570-32L123G18B130A</EntityName>
<Origin>
<X>21</X>
<Y>0</Y>
<Z>-42</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
</Holder>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>35</X>
<Y>0</Y>
<Z>-83.1</Z>
</DrivenPoint>
<DrivenPoint ID="2">
<Type>-1</Type>
<Radius>0</Radius>
<X>31.82</X>
<Y>0</Y>
<Z>-83.1</Z>
</DrivenPoint>
<CutterCompensation ID="1">0.8</CutterCompensation>
<CutterCompensation ID="2">0.8</CutterCompensation>
</Tool>
<Tool ID="100171" Units="Millimeter">
<Description>100171</Description>
<Teeth>1</Teeth>
<Type>Turning</Type>
<Cutter>
<Reference ID="12349 - CNMG120412">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Torneamento - Insertos paramétricos</ToolID>
<EntityName>12349 - CNMG120412</EntityName>
<Origin>
<X>-35.8</X>
<Y>0</Y>
<Z>-291.8</Z>
</Origin>
<Rotation>
<X>0</X>
<Y>-5</Y>
<Z>0</Z>
</Rotation>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
</Cutter>
<Holder>
<Reference ID="11977 - C6-390.410-100-110A">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>11977 - C6-390.410-100-110A</EntityName>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="11978 - C6-570-2C-60-148-40L">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>11978 - C6-570-2C-60-148-40L</EntityName>
<Origin>
<X>0</X>
<Y>0</Y>
<Z>-110</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="11979 - SL-PCLNL-40-12HP">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>11979 - SL-PCLNL-40-12HP</EntityName>
<Origin>
<X>-10</X>
<Y>0</Y>
<Z>-258</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
</Holder>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>-37</X>
<Y>0</Y>
<Z>-293</Z>
</DrivenPoint>
<DrivenPoint ID="2">
<Type>-1</Type>
<Radius>0</Radius>
<X>-37</X>
<Y>0</Y>
<Z>-293</Z>
</DrivenPoint>
<CutterCompensation ID="1">1.2</CutterCompensation>
<CutterCompensation ID="2">1.2</CutterCompensation>
</Tool>
<Tool ID="100178" Units="Millimeter">
<Description>100178</Description>
<Teeth>8</Teeth>
<Type>Milling</Type>
<Cutter>
<Reference ID="10084 - R90MT-12-05-RM">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Rotativas - Insertos Paramétricos</ToolID>
<EntityName>10084 - R90MT-12-05-RM</EntityName>
<Origin>
<X>44</X>
<Y>0</Y>
<Z>-614</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="10084 - R90MT-12-05-RM1">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Rotativas - Insertos Paramétricos</ToolID>
<EntityName>10084 - R90MT-12-05-RM</EntityName>
<Origin>
<X>31.112698</X>
<Y>-31.112698</Y>
<Z>-614</Z>
</Origin>
<Rotation>
<X>0</X>
<Y>0</Y>
<Z>-45</Z>
</Rotation>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="10084 - R90MT-12-05-RM11">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Rotativas - Insertos Paramétricos</ToolID>
<EntityName>10084 - R90MT-12-05-RM</EntityName>
<Origin>
<X>31.112698</X>
<Y>31.112698</Y>
<Z>-614</Z>
</Origin>
<Rotation>
<X>0</X>
<Y>0</Y>
<Z>45</Z>
</Rotation>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="10084 - R90MT-12-05-RM12">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Rotativas - Insertos Paramétricos</ToolID>
<EntityName>10084 - R90MT-12-05-RM</EntityName>
<Origin>
<X>0</X>
<Y>-44</Y>
<Z>-614</Z>
</Origin>
<Rotation>
<X>0</X>
<Y>0</Y>
<Z>-90</Z>
</Rotation>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="10084 - R90MT-12-05-RM13">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Rotativas - Insertos Paramétricos</ToolID>
<EntityName>10084 - R90MT-12-05-RM</EntityName>
<Origin>
<X>0</X>
<Y>44</Y>
<Z>-614</Z>
</Origin>
<Rotation>
<X>0</X>
<Y>0</Y>
<Z>90</Z>
</Rotation>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="10084 - R90MT-12-05-RM14">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Rotativas - Insertos Paramétricos</ToolID>
<EntityName>10084 - R90MT-12-05-RM</EntityName>
<Origin>
<X>-31.112698</X>
<Y>31.112698</Y>
<Z>-614</Z>
</Origin>
<Rotation>
<X>0</X>
<Y>0</Y>
<Z>135</Z>
</Rotation>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="10084 - R90MT-12-05-RM15">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Rotativas - Insertos Paramétricos</ToolID>
<EntityName>10084 - R90MT-12-05-RM</EntityName>
<Origin>
<X>-44</X>
<Y>0</Y>
<Z>-614</Z>
</Origin>
<Rotation>
<X>0</X>
<Y>0</Y>
<Z>180</Z>
</Rotation>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="10084 - R90MT-12-05-RM">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Rotativas - Insertos Paramétricos</ToolID>
<EntityName>10084 - R90MT-12-05-RM</EntityName>
<Origin>
<X>-31.1127</X>
<Y>-31.1127</Y>
<Z>-614</Z>
</Origin>
<Rotation>
<X>0</X>
<Y>0</Y>
<Z>-135</Z>
</Rotation>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
</Cutter>
<Holder>
<Reference ID="11974 - C8-390.410-100 120A">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>11974 - C8-390.410-100 120A</EntityName>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="12001 - C8-391.01-80 065">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>12001 - C8-391.01-80 065</EntityName>
<Origin>
<X>0</X>
<Y>0</Y>
<Z>-120</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="12001 - C8-391.01-80 065">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>12001 - C8-391.01-80 065</EntityName>
<Origin>
<X>0</X>
<Y>0</Y>
<Z>-185</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="12002 - C8-391.05-CD-32-320">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>12002 - C8-391.05-CD-32-320</EntityName>
<Origin>
<X>0</X>
<Y>0</Y>
<Z>-250</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="10707 - FCM-D100-32-11">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>10707 - FCM-D100-32-11</EntityName>
<Origin>
<X>0</X>
<Y>0</Y>
<Z>-570</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
</Holder>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-620</Z>
</DrivenPoint>
<DrivenPoint ID="2">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-620</Z>
</DrivenPoint>
<CutterCompensation ID="1">50</CutterCompensation>
<CutterCompensation ID="2">50</CutterCompensation>
</Tool>
<Tool ID="100192" Units="Millimeter">
<Description>100192</Description>
<Teeth>1</Teeth>
<Type>Milling</Type>
<Cutter>
<Reference ID="10087 - 880-05-03-05H-C-GM">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Rotativas - Insertos Paramétricos</ToolID>
<EntityName>10087 - 880-05-03-05H-C-GM</EntityName>
<Origin>
<X>-7.9</X>
<Y>0</Y>
<Z>-233.5</Z>
</Origin>
<Rotation>
<X>0</X>
<Y>0</Y>
<Z>180</Z>
</Rotation>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="10088 - 880-05 03 W05H-P-GM">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Rotativas - Insertos Paramétricos</ToolID>
<EntityName>10088 - 880-05 03 W05H-P-GM</EntityName>
<Origin>
<X>12</X>
<Y>0</Y>
<Z>-233.5</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
</Cutter>
<Holder>
<Reference ID="12007 - C4-390.410-100-090A">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>12007 - C4-390.410-100-090A</EntityName>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="12033 - 880-D2500C4-04">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>12033 - 880-D2500C4-04</EntityName>
<Origin>
<X>0</X>
<Y>0</Y>
<Z>-90</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
</Holder>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-234</Z>
</DrivenPoint>
</Tool>
<Tool ID="801154" Units="Millimeter">
<Description>801154</Description>
<Teeth>1</Teeth>
<Type>Turning</Type>
<Cutter>
<Reference ID="11325 - MKI-176807-13_4.4">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Torneamento - Insertos 3D</ToolID>
<EntityName>11325 - MKI-176807-13_4.4</EntityName>
<Origin>
<X>-5.18</X>
<Y>0</Y>
<Z>-225</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
</Cutter>
<Holder>
<Reference ID="12016 - 392.410-100-ASHL-32">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>12016 - 392.410-100-ASHL-32</EntityName>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
<Reference ID="11328 - MKS-366807-18">
<FileName>TBT_MASTER_LIBRARY.tls</FileName>
<ToolID>Holders & Acessorios</ToolID>
<EntityName>11328 - MKS-366807-18</EntityName>
<Origin>
<X>-8</X>
<Y>0</Y>
<Z>-55</Z>
</Origin>
<NoSpin>0</NoSpin>
<Alternate>Off</Alternate>
</Reference>
</Holder>
<DrivenPoint ID="2">
<Type>-1</Type>
<Radius>0</Radius>
<X>-2.980037</X>
<Y>0</Y>
<Z>-225</Z>
</DrivenPoint>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>-7.380037</X>
<Y>0</Y>
<Z>-225</Z>
</DrivenPoint>
<CutterCompensation ID="1">1.5</CutterCompensation>
<CutterCompensation ID="2">1.5</CutterCompensation>
</Tool>
</Tools>
</ToolLibrary>
我必须在上面的代码中做什么(考虑到它是正确的代码 - 随意提出一种新方法)才能使我的 TreeView 像图片中所示那样被填充?
很抱歉,我询问了可能已经涵盖的内容,我进行了搜索,但找不到可以与我的 XML 示例一起使用的内容。
Tks 提前,
丹尼尔
【问题讨论】:
-
J,非常感谢!它运行良好,我从你的代码中学到了很多东西!
标签: xml vb.net xml-parsing treeview populate