将TreeView控件绑定到一个XML文件(节选翻译)译自Scott Mitchell 的文章

我们看到通过静态的指定TreeView控件中的节点后的效果很不错,事实上TreeView控件的更大的作用在于通过数据绑定来动态的生成。明确的说,我们可以把一个XML文件的内容绑定到一个TreeView上。要绑定的XML文件的标签必须严格的遵循如下的格式: 
  <TREENODES> 
    <treenode text="..."> 
      <treenode text="..."> 
    </treenode> 
     
    <treenode text="..." /> 
     
    ... 
  </TREENODES> 
  我们看到,XML文件的根元素必须为 <TREENODES>(全部大写),并且每一个TreeNode元素必须为<treenode>。 
  在ASPFAQs.com的XMl疑难解答里很多例子用的都是 aspnetbooks.xml这个文件,它包含了一些关于Asp.net的图书的信息。想象一下我们现在要把这些图书的信息显示在我们的TreeView里,但是aspnetbooks.xml并不是符合我们上面的结构的文档格式,因此我们有两个选择: 
  1.创建一份符合我们所要格式的该文档的拷贝 
  2.通过XSLT样式单动态的把XML的内容转化成我们想要的格式 
  第二种选择比第一种要更高级,因为不需要额外的把文件复制两份,而当XML文档改变时,还要更新副本,这才是最头疼的。不过我们还是粗劣的看一下第一种方法: 
  花了一点时间,我把aspnetbooks.xml编辑成了一个 aspnetbooksTV.xml文件,我们可以看到,这次的文件的格式就是符合我们的TreeView控件所需要的格式了。 
  一旦文件创建好了之后我们就可以通过设置TreeView控件的TreeNode的TreeNodeSrc属性来指定到文件名称上来。代码如下: 
  <form runat="server"> 
    <ie:TreeView runat="server"> 
      <ie:TreeNode runat="server" Text="ASP.NET Books" Expanded="True"  
                     TreeNodeSrc="aspnetbooksTV.xml" />                    
    </ie:TreeView> 
  </form>  
  [ 运行示例
  正如你在例子中看到的,我们的XML的内容已经对应到我们的TreeView中了,很简单吧,在下一篇我们将实验第二种方法。
在上篇我们演示了以一个XML文档为数据源(只要格式是符合要求的)用TreeView控件显示层次结构的例子。在
本篇中,我们来看看如何通过XSLT样式单来把一个现有的XML文件变换成TreeView控件需要的格式。
把现有的文件变换成合适的格式:
XSLT(eXtensible Stylesheet Language Transform)是为了把XML从一种格式变换成另一种格式而设计的技术
,如果要是想完整的阐述清楚什么是XSLT已超出本文的范围了,想要更多的了解它可以参考XMLFiles.com上
的XSL部分。
为了把我们原始的aspnetbooks.xml转换成合适的XML格式,我需要为它构造一个XSLT样式单。一旦我们完成
了需要的XSLT样式单,我们就可以通过修改TreeNode的TreeNodeXsltSrc属性来转换我们的XML文件了,代码
如下:
<form runat="server">
  <ie:TreeView runat="server">
    <ie:TreeNode runat="server" Text="ASP.NET Books" Expanded="True"
                   TreeNodeSrc="aspnetbooksTV.xml"
                   TreeNodeXsltSrc="XSLTFile" />                 
  </ie:TreeView>
</form>
 
XSLT样式单是与XML格式相关的。要想把我们的aspnetbooks.xml文件转换成合适的格式,我们的样式单可以
写成下面的格式:
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform" version='1.0'>
  <xsl:template match="/books">
    <TREENODES>
      <xsl:for-each select="book">
        <treenode>
          <xsl:attribute name="text">
            <xsl:value-of select="title" />
          </xsl:attribute>
         
          <treenode>
            <xsl:attribute name="text">
              Price - $<xsl:value-of select="@price" />
            </xsl:attribute>
          </treenode>
          <treenode text="Authors">
            <xsl:for-each select="authors/author">
              <treenode>
                <xsl:attribute name="text">
                  <xsl:value-of select="text()" />
                </xsl:attribute>
              </treenode>
            </xsl:for-each>
          </treenode>
          <treenode>
            <xsl:attribute name="text">
              Year Published - <xsl:value-of select="year" />
            </xsl:attribute>
          </treenode>
        </treenode>
      </xsl:for-each>
    </TREENODES>
  </xsl:template>
</xsl:stylesheet>
注意,如果要想为XSLT中的元素指定属性值时要用到<xsl:attribute name="AttributeName">标签,比如要
为<treenode>元素指定text属性应该这样写:
<treenode>
  <xsl:attribute name="text">
    这里写上text的值
  </xsl:attribute>
 
  ...
</treenode>
我们把上面创建的样式单保存成 aspbooks2treeview.xsl文件后,我们所要做的只是指定以下TreeNode的
TreeNodeXsltSrc属性了。下面的代码和运行实例演示了如何用XSLT样式单动态的转换一种XML格式为所需要的格式。
<form runat="server">
  <ie:TreeView runat="server">
    <ie:TreeNode runat="server" Text="ASP.NET Books" Expanded="True"
                   TreeNodeSrc="aspnetbooksTV.xml"
                   TreeNodeXsltSrc="aspbooks2treeview.xsl" />                 
  </ie:TreeView>
</form>
 
[ 运行示例]
总结:文章译完了,还是收获不小,以后多多加油,继续努力~~!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值