科属种XML文档三级树状图浏览的实现

数据库表的结构为三表:科表Family, 属表Genus, 物种表Species

查询生成XML文档的SQL代码:

--两张表链接查询科、属生成XML文件
SELECT Family.FamilyName, Genus.GenusName
FROM Family
JOIN Genus ON Family.FamilyID = Genus.FamilyID
ORDER BY Family.FamilyName, Genus.GenusName
FOR XML AUTO, ROOT('Taxon')
 
 
 
 
--三张表科、属、种关联查询生成XML文件
SELECT  Family.FamilyName,
        Genus.GenusName,
        Species.AbbreviateName
FROM    Family
        INNER JOIN Genus ON Family.FamilyID = Genus.FamilyID
        INNER JOIN Species ON Genus.GenusID = Species.GenusID
        WHERE dbo.Family.FamilyName='Apiaceae'
        ORDER BY FamilyName,GenusName,AbbreviateName
FOR     XML AUTO,
            ROOT('Taxon')

所生成的XML文档示例:

?xml version="1.0" encoding="UTF-8"?>
<Taxon>
  <Family FamilyName="Apiaceae">
    <Genus GenusName="Acronema">
      <Species AbbreviateName="Acronema alpinum" />
      <Species AbbreviateName="Acronema astrantiifolium" />
      <Species AbbreviateName="Acronema brevipedicellatum" />
      <Species AbbreviateName="Acronema chienii" />
      <Species AbbreviateName="Acronema chienii var. dissectum" />
      <Species AbbreviateName="Acronema chinense" />
      <Species AbbreviateName="Acronema chinense var. humile" />
      <Species AbbreviateName="Acronema commutatum" />
      <Species AbbreviateName="Acronema edosmioides" />
      <Species AbbreviateName="Acronema forrestii" />
      <Species AbbreviateName="Acronema gracile" />
      <Species AbbreviateName="Acronema graminifolium" />
      <Species AbbreviateName="Acronema handelii" />
      <Species AbbreviateName="Acronema hookeri" />
      <Species AbbreviateName="Acronema hookeri var. graminifolium" />
      <Species AbbreviateName="Acronema minus" />
      <Species AbbreviateName="Acronema muscicola" />
      <Species AbbreviateName="Acronema nervosum" />
      <Species AbbreviateName="Acronema paniculatum" />
      <Species AbbreviateName="Acronema schneideri" />
      <Species AbbreviateName="Acronema sichuanense" />
      <Species AbbreviateName="Acronema tenerum" />
      <Species AbbreviateName="Acronema xizangense" />
      <Species AbbreviateName="Acronema yadongense" />
    </Genus>
    <Genus GenusName="Aegopodium">
      <Species AbbreviateName="Aegopodium alpestre" />
      <Species AbbreviateName="Aegopodium alpestre f. scabrum" />
      <Species AbbreviateName="Aegopodium alpestre f. tenerum" />
      <Species AbbreviateName="Aegopodium alpestre f. tenuisectum" />
      <Species AbbreviateName="Aegopodium alpestre var. daucifolium" />
      <Species AbbreviateName="Aegopodium anthriscoides" />
      <Species AbbreviateName="Aegopodium brachycarpum" />
      <Species AbbreviateName="Aegopodium handelii" />
      <Species AbbreviateName="Aegopodium henryi" />
      <Species AbbreviateName="Aegopodium latifolium" />
      <Species AbbreviateName="Aegopodium tadshikorum" />
    </Genus>
    <Genus GenusName="Aethusa">
      <Species AbbreviateName="Aethusa leptophylla" />
    </Genus>
    <Genus GenusName="Albertia">
      <Species AbbreviateName="Albertia commutata" />
    </Genus>
    <Genus GenusName="Ammi">
      <Species AbbreviateName="Ammi copticum" />
      <Species AbbreviateName="Ammi ehrenbergii" />
      <Species AbbreviateName="Ammi majus" />
      <Species AbbreviateName="Ammi visnaga" />
    </Genus>
    <Genus GenusName="Anethum">
      <Species AbbreviateName="Anethum foeniculum" />
      <Species AbbreviateName="Anethum graveolens" />
      <Species AbbreviateName="Anethum graveolens subsp. sowa" />
      <Species AbbreviateName="Anethum japonicum" />
      <Species AbbreviateName="Anethum pannorium" />
      <Species AbbreviateName="Anethum pastinaca" />
      <Species AbbreviateName="Anethum sowa" />
    </Genus>
......
</Taxon>

执行代码:

   1:  using System;
   2:  using System.Web.UI.WebControls;
   3:  using System.Xml;
   4:   
   5:  public partial class Default2 : System.Web.UI.Page
   6:  {
   7:      private string xmlFilePath = @"c:\Data\Apiaceae.xml";
   8:      protected void Page_Load(object sender, EventArgs e)
   9:      {
  10:          XmlDocument doc = new XmlDocument();
  11:          doc.Load(xmlFilePath);
  12:          TreeNode root = new TreeNode(doc.DocumentElement.Name);
  13:          TreeView1.Nodes.Add(root);
  14:          foreach (XmlNode familynode in doc.DocumentElement.ChildNodes)
  15:          {
  16:              TreeNode family = new TreeNode("Family: " + familynode.Attributes["FamilyName"].Value + " (" + familynode.ChildNodes.Count.ToString() + ")");
  17:              root.ChildNodes.Add(family);
  18:              if (familynode.HasChildNodes)
  19:              {
  20:                  foreach (XmlNode genusnode in familynode.ChildNodes)
  21:                  {
  22:                      TreeNode n2 = new TreeNode("Genus: " + genusnode.Attributes["GenusName"].Value+" ("+genusnode.ChildNodes.Count.ToString()+")");
  23:                      family.ChildNodes.Add(n2);
  24:                      if (genusnode.HasChildNodes)
  25:                      {
  26:                          foreach (XmlNode speciesnode in genusnode.ChildNodes)
  27:                          {
  28:                              TreeNode n3=new TreeNode("Species: "+speciesnode.Attributes["AbbreviateName"].Value);
  29:                              n2.ChildNodes.Add(n3);
  30:                          }
  31:                      }
  32:                  }
  33:              }
  34:          }
  35:      }
  36:  }

执行结果:

2009-04-30_160621_2.png

转载于:https://www.cnblogs.com/apiaceae/archive/2009/04/30/1447075.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值