将XML加载到Treeview控件 [英] Load XML to a treeview control

查看:68
本文介绍了将XML加载到Treeview控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆