xml使用asp.net中的项目符号列表

时间:2015-10-09 11:41:28

标签: c# asp.net .net xml bulletedlist

我正在尝试创建项目符号列表并使用xml文件(Kategoriler.xml)作为数据源。这是我的xml代码:

<bookstore>
 <book category="cooking">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
 </book>
</bookstore>

页面设计:

<asp:BulletedList ID="BulletedList2" runat="server" BulletStyle="Numbered" DataSourceID="XmlDataSource1">
</asp:BulletedList>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Kategoriler.xml"></asp:XmlDataSource>

当我运行代码时,我会看到如下列表:

1.System.Web.UI.WebControls.XmlDataSourceNodeDescriptor
2.System.Web.UI.WebControls.XmlDataSourceNodeDescriptor
3.System.Web.UI.WebControls.XmlDataSourceNodeDescriptor
4.System.Web.UI.WebControls.XmlDataSourceNodeDescriptor

我不知道自己做错了什么。 谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

您必须指定DataTextField&amp; DataValueField中的BulletedList个属性: -

<asp:BulletedList ID="BulletedList2" runat="server" BulletStyle="Numbered" 
     DataSourceID="XmlDataSource1" DataTextField="author" DataValueField="year" >
</asp:BulletedList>

<强>更新

@Michael是正确的XmlDataSource不适用于xml节点的值,但仅适用于属性,因此您必须像这样修改XML: -

<bookstore>
 <book category="cooking">
  <title lang="en">Everyday Italian</title>
  <author name="Giada De Laurentiis" year="2005"></author>
  <year></year>
  <price>30.00</price>
 </book>
</bookstore>

然后,您必须像这样指定XPath属性: -

<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Kategoriler.xml" 
  XPath="/bookstore/book/author"></asp:XmlDataSource>

然后,相应地更改BulletedList属性: -

DataTextField="name" DataValueField="year"

但实际上,您可能无法更改XML本身,因此您可以在后面的代码中读取此XML,然后以编程方式绑定BulletedList。

更新2:

正如我所说,根据XMLDataSource行为更改XML文件是不切实际的,您可以使用LINQ-to-XML查询XML文件并将其绑定如下: -

XDocument xdoc = XDocument.Load(@"YourXMLFilePath");
var XMLdata = xdoc.Descendants("book")
                   //Optional Filter
                   .Where(x => (string)x.Attribute("category") == "cooking") 
                   .Select(x => new
                           {
                              AuthorName = (string)x.Element("author"),
                              Year = (string)x.Element("year")
                           });

最后,您可以像这样绑定数据: -

BulletedList2.DataSource = XMLdata;
BulletedList2.DataValueField = "Year";
BulletedList2.DataTextField = "AuthorName";
BulletedList2.DataBind();