3

箇条書きリストを作成し、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

何が間違っているのかわかりません。御時間ありがとうございます。

4

1 に答える 1

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 をコード ビハインドで読み取り、プログラムで BulletedList をバインドできます。

更新 2:

私が言ったように、代わりにXMLファイルを照会して次のようにバインドするためにXMLDataSource使用できる動作に従ってXMLファイルを変更することは実用的ではありません:-LINQ-to-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();
于 2015-10-09T11:46:47.630 に答える