Kobarin's Development Blog

C#やASP.NET、公開APIなどについての記録です。

階層的なXMLをRepeaterで出力 〜其の1〜

repeater.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="publishers01.aspx.cs" Inherits="api_other_publishers" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title></title>
</head>
<body>
  <form id="form1" runat="server">
  <asp:Repeater ID="rpPublishers" runat="server" DataSourceID="xmlds">
    <ItemTemplate>
      <h4><%# XPath("PublisherName")%></h4>
      
      <asp:Repeater ID="rpAuthors" runat="server" DataSource='<%# XPathSelect("Authors/Author") %>'>
        <ItemTemplate>
          <h5><%# XPath("AuthorName") %></h5>
          
          <asp:Repeater ID="rpTitles" runat="server" DataSource='<%# XPathSelect("Titles/Title") %>'>
            <HeaderTemplate> <ol> </HeaderTemplate>
            <ItemTemplate>
              <li> <%# XPath(".") %></li>
            </ItemTemplate>
            <FooterTemplate> </ol> </FooterTemplate>
          </asp:Repeater>

        </ItemTemplate>
      </asp:Repeater>

    </ItemTemplate>
  </asp:Repeater>

  <asp:XmlDataSource ID="xmlds" runat="server" DataFile="publishers01.xml" XPath="Publishers/Publisher" />
  </form>
</body>
</html>
books.xml
<?xml version="1.0" encoding="UTF-8"?>
<Publishers>
  <Publisher>
    <PublisherName>アズキー</PublisherName>
    <City>東京</City>
    <Country>Japan</Country>
    <Authors>
      <Author>
        <AuthorName>太宰治</AuthorName>
        <Titles>
          <Title>走れメロス</Title>
          <Title>人間失格</Title>
          <Title>お伽草紙</Title>
        </Titles>
      </Author>
      <Author>
        <AuthorName>宮沢賢治</AuthorName>
        <Titles>
          <Title>銀河鉄道の夜</Title>
        </Titles>
      </Author>
      <Author>
        <AuthorName>樋口一葉</AuthorName>
        <Titles>
          <Title>闇桜</Title>
          <Title>たま欅</Title>
        </Titles>
      </Author>
    </Authors>
  </Publisher>
  <Publisher>
    <PublisherName>中学館</PublisherName>
    <City>東京</City>
    <Country>Japan</Country>
    <Authors>
      <Author>
        <AuthorName>大江健三郎</AuthorName>
        <Titles>
          <Title>火山</Title>
          <Title>奇妙な仕事</Title>
        </Titles>
      </Author>
      <Author>
        <AuthorName>司馬 遼太郎</AuthorName>
        <Titles>
          <Title>梟の城</Title>
          <Title>上方武士道</Title>
        </Titles>
      </Author>
    </Authors>
  </Publisher>
</Publishers>
補足

「<%# XPath(".") %>」で結構つまづいた。
あと、今回のように要素名を指定しないタイプのXMLの場合、「<%# Eval("XXX") %>」ではないので注意が必要。