“<%# ((objNode)Container.DataItem)["Title"].InnerText) %>”你加个  )试试

解决方案 »

  1.   

    <%# ((objNode)Container.DataItem)["Title"].InnerText %>”
    ===>
    <%# ((XmlNode)Container.DataItem)["Title"].InnerText %>”
      

  2.   

    刚才的代码有些错误,正确的应该是:
    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>
      

  3.   

    to  freecs(^=^) :
    我试了,没用。而且加了之后根本就不成对了to webdiyer(陕北吴旗娃) :
    提示XmlNode未定义
      

  4.   

    Dim objNode As XmlNode = objdoc.DocumentElement.SelectNodes("Trade/Subject")应为:
    Dim objNode As XmlNode = objdoc.DocumentElement.SelectSingleNode("Trade/Subject")
      

  5.   

    你需要在test.aspx页面上引入 System.Xml命名空间,象这样:<%@Import Namespace="System.Xml"%>
      

  6.   

    我在test.aspx.vb文件中加了:
    Imports System.Xml还是不行,按照我这里页面执行的情况,绑定似乎应该是已经成功了,能够按照数据的条数显示出相应行数的*****,只是在显示数据内容的时候出错
      

  7.   

    是在test.aspx页上,不是test.aspx.vb页上!
      

  8.   

    <%@ Import Namespace="System.Xml" %>
    <asp:Repeater id="Repeater1" runat="server">
       <ItemTemplate>
         ****<%# ((XmlNode)Container.DataItem)["Title"].InnerText %>***
       </ItemTemplate>
    </asp:Repeater>
      

  9.   

    现在的代码如下:
    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>的数目相同行数的“*****”
      

  10.   

    试试将:“<%# ((XmlNode)Container.DataItem)["Title"].InnerText %>”
    改为:“<%# ((XmlNode)((XmlNode)Container.DataItem)["Title"]).InnerText %>”
      

  11.   

    TO webdiyer(陕北吴旗娃):
    还是一样,错误信息
    “编译器错误信息: BC30684: “XmlNode”是一个类型,不能用作表达式。”
      

  12.   

    这是在我的机器上经过测试完全可以正常运行的代码:test.xml
    -----------
    <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>
      

  13.   

    VB:<%@ Page Language="VB" %>
    <%@ Import Namespace="System.Xml" %>
    <asp:Repeater id="Repeater1" runat="server">
       <ItemTemplate>
         ****<%# CType(Container.DataItem, XmlNode)("Title").InnerText %>***
       </ItemTemplate>
    </asp:Repeater>
      

  14.   

    谢谢saucer(思归)和webdiyer(陕北吴旗娃)的帮助, saucer(思归)最后给的代码是正确的。其实这个问题的关键还是我之前没有理解数据绑定中“DataBinder.Eval(Container.DataItem, "Title")”这句的意思,一般书上也没有提到这个问题。
    其实相对与一般绑定的数据源为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