将XML加载到Treeview控件 [英] Load XML to a treeview control
问题描述
以下代码将XML节点名称和属性名称加载到我的treeveiw控件中.我描述了按钮的问题.
The following code loads XML nodes names and attributes name into my treeveiw control. I describe the problems towards the button.
For Each Record As XElement In doc...<record>
recordNode = TreeView1.Nodes.Add(Record.Name.ToString)
For Each Leader As XElement In Record...<leader>
leaderNode = recordNode.Nodes.Add(Leader.Name.ToString)
For Each Controlfield As XElement In Record...<controlfield>
controlfieldNode = recordNode.Nodes.Add(Controlfield.@tag.ToString)
For Each Datafield As XElement In Record...<datafield>
datafielNode = recordNode.Nodes.Add(Datafield.@tag.ToString)
Next
Next
Next
Next
XML代码:
XML code:
<collection>
<record>
<leader>03439cam 2200481Ia 4500</leader>
<controlfield tag="001">648147285</controlfield>
<controlfield tag="003">SIRSI</controlfield>
<controlfield tag="005">20110301135853.0</controlfield>
<controlfield tag="008">100716s2010 cauab bm f000 0 eng d</controlfield>
<controlfield tag="007">cr b|||||a||||</controlfield>
<datafield tag="035" ind1=" " ind2=" ">
<subfield code="a">TEST</subfield>
</datafield>
<datafield tag="037" ind1=" " ind2=" ">
<subfield code="a">ADA524635</subfield>
<subfield code="b">DTI</subfield>
</datafield>
<datafield tag="043" ind1=" " ind2=" ">
<subfield code="a">n-us---</subfield>
</datafield>
<datafield tag="040" ind1=" " ind2=" ">
<subfield code="a">AD#</subfield>
<subfield code="c">AD#</subfield>
<subfield code="d">3D#</subfield>
</datafield>
<datafield tag="049" ind1=" " ind2=" ">
<subfield code="a">AD#A</subfield>
</datafield>
<datafield tag="090" ind1=" " ind2=" ">
<subfield code="a">:</subfield>
</datafield>
<datafield tag="100" ind1="1" ind2=" ">
<subfield code="a"></subfield>
</datafield>
<datafield tag="245" ind1="1" ind2="0">
<subfield code="a"></subfield>
</datafield>
<datafield tag="260" ind1=" " ind2=" ">
<subfield code="a">:</subfield>
<subfield code="b"></subfield>
<subfield code="c">2010.</subfield>
</datafield>
<datafield tag="300" ind1=" " ind2=" ">
<subfield code="a">xxiv, 87 p. :</subfield>
<subfield code="b">col. ill., col. maps ;</subfield>
<subfield code="c">28 cm.</subfield>
</datafield>
<datafield tag="500" ind1="a" ind2=" ">
<subfield code="a">Thesis Advisor(s): </subfield>
</datafield>
<datafield tag="500" ind1="b" ind2=" ">
<subfield code="a">"June 2010."</subfield>
</datafield>
<datafield tag="500" ind1="c" ind2=" ">
<subfield code="a">Author(s) </subfield>
</datafield>
<datafield tag="500" ind1=" " ind2=" ">
<subfield code="a">Description based on title screen as viewed on July 14, 2010.</subfield>
</datafield>
<datafield tag="500" ind1=" " ind2=" ">
<subfield code="a"></subfield></datafield>
<datafield tag="502" ind1=" " ind2=" ">
<subfield code="a">Thesis </subfield>
</datafield>
<datafield tag="504" ind1=" " ind2=" ">
<subfield code="a">Includes bibliographical references (p. 85-86).</subfield>
</datafield>
<datafield tag="506" ind1=" " ind2=" ">
<subfield code="a">"Approved for public release, distribution unlimited"--Cover.</subfield>
</datafield>
<datafield tag="520" ind1=" " ind2=" ">
<subfield code="a">t co</subfield></datafield>
<datafield tag="530" ind1=" " ind2=" ">
<subfield code="a">Also available in print.</subfield>
</datafield>
<datafield tag="538" ind1=" " ind2=" ">
<subfield code="a">Mode of access: World Wide Web.</subfield>
</datafield>
</record>
输出示例请注意,我仅获得一个controlfield节点,但获得所有datafieldnodes:
Example of output notice that I get only one controlfield node but I get all the datafieldnodes:
Leader
001
035
040
037
CONTINUES DOWN
以下代码可以毫无问题地加载我的所有数据字段节点.
输出
035
.
.
538
The following code loads all my datafield nodes with no problems.
Output
035
.
.
538
For Each Datafield As XElement In Record...<datafield>
datafielNode = recordNode.Nodes.Add(Datafield.@tag.ToString)
问题:
以下应与前一个代码相似的代码仅加载一个控制字段节点(第一个).如果您看到XML示例,那么我有5个controlfield节点.
输出:
001
The problem:
The following code which it should be similar to the previous only loads one control field node (the first one). If you see the XML sample I got 5 controlfield nodes.
Output:
001
For Each Controlfield As XElement In Record...<controlfield>
controlfieldNode = recordNode.Nodes.Add(Controlfield.@tag.ToString)
感谢您的帮助.
Appreciate your help.
推荐答案
根据您的xml,Controlfield和Datafield不是Leaderfield的子节点.
您应该为每个循环运行三个独立的for循环,而不是嵌套它们.
According to your xml, Controlfield and Datafield are not child nodes of the Leaderfield.
You should run three independant for loops for each of them, instead of nesting them.
这篇关于将XML加载到Treeview控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!