在看了<<asp.net+xml做论坛>>后,感谢作者给我学到了好多东西,但是,当我下载了作者的论坛代码后,感觉质量不是很高,结构没有体现出.net的 精髓.
我学习xml也只有一星期吧。所以,我想我还没有踏进门里,因为还有好多很基本的问题没有解决。在这里,我也会提出来,希望大家可以留言一起解决。
关于xml所要接触的类,还有类所包含了哪些方法,这里将不在总述。
现在,我将要做的是用datagrid绑定xml,
可以用:
DataSet ds=new DataSet();
ds.ReadXml(Mapath("file.xml"));
DataGrid.DataSource=ds;
DataGrid.DataBind();
很简单,这样就可以把xml绑定到DataGrid控件上了,而现在要的是,输出符合xpath语句的数据绑定到dataGrid上,实现方法可以用xsl实现,而现在要在DataGrid上实现,那要怎么样实现呢。
我想,就是将符合条件的xml数据动态生成Datatable,然后,就可以绑定输出了。
例如:
现在有个xml文件,cc.xml
<?xml version="1.0" encoding="utf-8" ?>
<nihao>
<a id="1">
<tian>haha</tian>
<name>aaaa</name>
</a>
<a id="2">
<tian>hehe</tian>
<name>cccc</name>
</a>
</nihao>
我们现在绑定数据,这是前台代码
<form id="Form1" method="post" runat="server">
<asp:DataGrid ID="DataGrid" Runat="server"></asp:DataGrid>
<asp:Button id="Button1" runat="server"Text="Button"></asp:Button>
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:DataGrid id="DataGrid1" runat="server" ></asp:DataGrid>
<asp:Label id="Label1" runat="server">Label</asp:Label>
</form>
在这,我们用了2个DataGrid,一个用来显示全部数据,一个用来click button后生成的数据绑定。
好了,现在我们给出后台代码:
private void Button1_Click(object sender, System.EventArgs e)
{
string s=this.TextBox1.Text;
System.Xml.XmlDocument Doc=new XmlDocument();
Doc.Load(this.Server.MapPath("XMLFile1.xml"));
System.Xml.XmlNodeList nodes=Doc.SelectNodes("//a/tian");
foreach(XmlNode node in nodes)
{
if(node.InnerText==this.TextBox1.Text)
{
DataTable objTable = new DataTable("QueryResult");
objTable.Columns.Add("id", Type.GetType("System.String"));
objTable.Columns.Add("tian", Type.GetType("System.String"));
objTable.Columns.Add("name", Type.GetType("System.String"));
DataRow row=objTable.NewRow();
row[0]=node.ParentNode.Attributes.GetNamedItem("id").Value;
row[1]=2;
row[2]=1;
objTable.Rows.Add(row);
this.DataGrid1.DataSource=objTable;
this.DataGrid1.DataBind();
}
else
{
this.Label1.Text="没有你要的数据";
}
}
}
哈哈,大家也许看到了这几行吧:
row[0]=node.ParentNode.Attributes.GetNamedItem("id").Value;
row[1]=2;
row[2]=1;
本来是这样的:
row[0]=node.ParentNode.Attributes.GetNamedItem("id").Value;
row[1]=node.Attributes.GetNamedItem("tian").Value;
可是有报错,没有实例化tian
所以,这也是我要问的问题,大家可不要笑我呀。好了,今天就到这了。再见!