我们看到通过静态的指定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中了,很简单吧,在下一篇我们将实验第二种方法。
<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(eXtensible Stylesheet Language Transform)是为了把XML从一种格式变换成另一种格式而设计的技术
,如果要是想完整的阐述清楚什么是XSLT已超出本文的范围了,想要更多的了解它可以参考XMLFiles.com上
的XSL部分。
为了把我们原始的aspnetbooks.xml转换成合适的XML格式,我需要为它构造一个XSLT样式单。一旦我们完成
为了把我们原始的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文件转换成合适的格式,我们的样式单可以
<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>
<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>
<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">标签,比如要
<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的
<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>
[ 运行示例]
<ie:TreeView runat="server">
<ie:TreeNode runat="server" Text="ASP.NET Books" Expanded="True"
TreeNodeSrc="aspnetbooksTV.xml"
TreeNodeXsltSrc="aspbooks2treeview.xsl" />
</ie:TreeView>
</form>
[ 运行示例]
总结:文章译完了,还是收获不小,以后多多加油,继续努力~~!