刚才的代码有些错误,正确的应该是: test.aspx ----------------------------- <asp:Repeater id="Repeater1" runat="server"> <ItemTemplate> ****<%# ((objNode)Container.DataItem)["Title"].InnerText %>*** </ItemTemplate> </asp:Repeater> test.aspx.vb -------------------- Dim objdoc As XmlDocument = New XmlDocument() objdoc.Load(MapPath("/xml/test.xml")) Dim objNode As XmlNode = objdoc.DocumentElement.SelectNodes("Trade/Subject") Repeater1.DataSource = objNode.ChildNodes Repeater1.DataBind()test.xml --------------------- <Trade> <Subject> <News> <Title>aaaaaa</Title> <LinkUrl>news.aspx?id=121</LinkUrl> </News> <News> <Title>bbbbbb</Title> <LinkUrl>news.aspx?id=122</LinkUrl> </News> <News> <Title>ccccc</Title> <LinkUrl>news.aspx?id=123</LinkUrl> </News> </Subject> </Trade>
to freecs(^=^) : 我试了,没用。而且加了之后根本就不成对了to webdiyer(陕北吴旗娃) : 提示XmlNode未定义
Dim objNode As XmlNode = objdoc.DocumentElement.SelectNodes("Trade/Subject")应为: Dim objNode As XmlNode = objdoc.DocumentElement.SelectSingleNode("Trade/Subject")
===>
<%# ((XmlNode)Container.DataItem)["Title"].InnerText %>”
test.aspx
-----------------------------
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
****<%# ((objNode)Container.DataItem)["Title"].InnerText %>***
</ItemTemplate>
</asp:Repeater>
test.aspx.vb
--------------------
Dim objdoc As XmlDocument = New XmlDocument()
objdoc.Load(MapPath("/xml/test.xml"))
Dim objNode As XmlNode = objdoc.DocumentElement.SelectNodes("Trade/Subject")
Repeater1.DataSource = objNode.ChildNodes
Repeater1.DataBind()test.xml
---------------------
<Trade>
<Subject>
<News>
<Title>aaaaaa</Title>
<LinkUrl>news.aspx?id=121</LinkUrl>
</News>
<News>
<Title>bbbbbb</Title>
<LinkUrl>news.aspx?id=122</LinkUrl>
</News>
<News>
<Title>ccccc</Title>
<LinkUrl>news.aspx?id=123</LinkUrl>
</News>
</Subject>
</Trade>
我试了,没用。而且加了之后根本就不成对了to webdiyer(陕北吴旗娃) :
提示XmlNode未定义
Dim objNode As XmlNode = objdoc.DocumentElement.SelectSingleNode("Trade/Subject")
Imports System.Xml还是不行,按照我这里页面执行的情况,绑定似乎应该是已经成功了,能够按照数据的条数显示出相应行数的*****,只是在显示数据内容的时候出错
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
****<%# ((XmlNode)Container.DataItem)["Title"].InnerText %>***
</ItemTemplate>
</asp:Repeater>
test.aspx
----------
<%@Import Namespace="System.Xml"%>
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
****<%# ((XmlNode)Container.DataItem)["Title"].InnerText %>***<br>
</ItemTemplate>
</asp:Repeater>
test.aspx.vb
-------------
Imports System.Xml
Protected WithEvents Repeater1 As System.Web.UI.WebControls.Repeater
Dim objDoc As New XmlDocument()
objDoc.Load(MapPath("/xml/test.xml"))
Dim objNode As XmlNode = objDoc.SelectSingleNode("Trade/Subject")
Repeater1.DataSource = objNode
Repeater1.DataBind()
test.xml
---------------------
<Trade>
<Subject>
<News>
<Title>aaaaaa</Title>
<LinkUrl>news.aspx?id=121</LinkUrl>
</News>
<News>
<Title>bbbbbb</Title>
<LinkUrl>news.aspx?id=122</LinkUrl>
</News>
<News>
<Title>ccccc</Title>
<LinkUrl>news.aspx?id=123</LinkUrl>
</News>
</Subject>
</Trade>现在的错误提示是:
编译器错误信息: BC30684: “XmlNode”是一个类型,不能用作表达式。将“<%# ((XmlNode)Container.DataItem)["Title"].InnerText %>”改为“<%# ((objNode)Container.DataItem)["Title"].InnerText %>”后的错误提示是:
编译器错误信息: BC30198: 需要“)”。将“<%# ((XmlNode)Container.DataItem)["Title"].InnerText %>”去掉后无错误提示,并能显示与<News></News>的数目相同行数的“*****”
改为:“<%# ((XmlNode)((XmlNode)Container.DataItem)["Title"]).InnerText %>”
还是一样,错误信息
“编译器错误信息: BC30684: “XmlNode”是一个类型,不能用作表达式。”
-----------
<DocumentElement>
<friend>
<id>55</id>
<name>Haili</name>
<dt>2002-07-20T08:11:22.0000000+08:00</dt>
<sex>false</sex>
<age>22</age>
<addr>Myhome</addr>
<msg>My message</msg>
<area>Shanghai</area>
<email>[email protected]</email>
</friend>
<friend>
<id>58</id>
<name>Good Girl</name>
<dt>2002-07-20T22:16:44.0000000+08:00</dt>
<sex>false</sex>
<age>13</age>
<addr>Hello</addr>
<msg>What's this?</msg>
<area>Beijing</area>
<email>[email protected]</email>
</friend>
<friend>
<id>59</id>
<name>Webdiyer</name>
<dt>2003-07-20T22:16:44.0000000+08:00</dt>
<sex>true</sex>
<age>20</age>
<addr>Wuqi</addr>
<msg>Hello,World!</msg>
<area>Yan'an</area>
<email>[email protected]</email>
</friend>
</DocumentElement>
test.aspx
----------------
<%@ Page Language="C#"%>
<%@ Import Namespace="System.Xml"%>
<script runat="server">
void Page_Load(Object src, EventArgs e){
if(!Page.IsPostBack){
XmlDocument doc=new XmlDocument();
doc.Load(Server.MapPath("test.xml"));
XmlNodeList nodes=doc.SelectNodes("DocumentElement/friend");
repeater1.DataSource=nodes;
repeater1.DataBind();
}
}
</script>
<HTML><HEAD><TITLE>
Welcome to Webdiyer.com
</TITLE><meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="content-type" content="text/html;charset=gb2312">
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Haili([email protected])"></head>
<body>
<form runat="server">
<asp:Repeater runat="server" id="repeater1">
<ItemTemplate>姓名:<%#((XmlNode)Container.DataItem)["name"].InnerText%><br>
性别:<%#(((XmlNode)Container.DataItem)["sex"].InnerText.ToLower()=="true")?"男":"女"%><br>
年龄:<%#((XmlNode)Container.DataItem)["age"].InnerText%><br>
住址:<%#((XmlNode)Container.DataItem)["addr"].InnerText%><p>
</ItemTemplate>
</asp:Repeater>
</form></body></html>
<%@ Import Namespace="System.Xml" %>
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
****<%# CType(Container.DataItem, XmlNode)("Title").InnerText %>***
</ItemTemplate>
</asp:Repeater>
其实相对与一般绑定的数据源为DataView时
“DataBinder.Eval(Container.DataItem, "Title")”
等价于
VB:
“CType(Container.DataItem, DataRowView)("Title")”
C#:
((DataRowView)Container.DataItem)["Title"]所以当绑定的数据源为XmlNodeList的时候,显示的语句就应该为
VB:
“CType(Container.DataItem, XmlNode)("Title").InnerText
C#:
((DataRowView)Container.XmlNode)["Title"].InnerText