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

标签: Asp.net .Net XML C#
发布时间: 2017/3/26 2:29:41
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想创建项目符号列表,并使用 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:

您必须指定 DataTextField & 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 在后面的代码中,然后以编程方式将绑定你如何。

更新 2:

正如我说它不是实际更改您的 XML 文件根据 XMLDataSource 行为也可以选择使用 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();
赞助商