xml 与 asp.net 中的项目符号列表一起使用
xml using with bulleted list in asp.net
我正在尝试创建项目符号列表并使用 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
我不知道我做错了什么。
感谢您的宝贵时间。
您必须在 BulletedList
中指定 DataTextField
和 DataValueField
属性:-
<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。
更新二:
正如我所说,根据 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();
我正在尝试创建项目符号列表并使用 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
我不知道我做错了什么。 感谢您的宝贵时间。
您必须在 BulletedList
中指定 DataTextField
和 DataValueField
属性:-
<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。
更新二:
正如我所说,根据 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();