Kobarin's Development Blog

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

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

order.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="order.aspx.cs" Inherits="order" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head id="Head1" runat="server">
  <title>Order</title>
</head>
<body>
  <form id="form1" runat="server">
  <asp:XmlDataSource runat="server" ID="XmlDataSource1" XPath="orders/order" DataFile="order.xml" />
  <asp:Repeater ID="Repeater1" runat="server" DataSourceID="XmlDataSource1">
    <ItemTemplate>
      <h2>Order</h2>
      <table>
        <tr>
          <td> Customer </td>
          <td> <%#XPath("customer/@id")%> </td>
          <td> <%#XPath("customername/firstn")%> </td>
          <td> <%#XPath("customername/lastn")%> </td>
        </tr>
        <tr>
          <td> Ship To </td>
          <td> <%#XPath("shipaddress/address1")%></font> </td>
          <td> <%#XPath("shipaddress/city")%> </td>
          <td> <%#XPath("shipaddress/state")%>,<%#XPath("shipaddress/zip")%> </td>
        </tr>
      </table>
      <h3> Order Summary</h3>
      <asp:Repeater ID="Repeater2" DataSource='<%#XPathSelect("summary/item")%>' runat="server">
        <ItemTemplate>
          <b> <%#XPath("@dept")%></b> - <%#XPath(".")%><br />
        </ItemTemplate>
      </asp:Repeater>
      <hr />
    </ItemTemplate>
  </asp:Repeater>
  </form>
</body>
</html>
order.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<orders>
  <order>
    <customer id="12345" />
    <customername>
      <firstn>John</firstn>
      <lastn>Doe</lastn>
    </customername>
    <transaction id="12345" />
    <shipaddress>
      <address1>1234 Tenth Avenue</address1>
      <city>Bellevue</city>
      <state>Washington</state>
      <zip>98001</zip>
    </shipaddress>
    <summary>
      <item dept="tools">screwdriver</item>
      <item dept="tools">hammer</item>
      <item dept="plumbing">fixture</item>
    </summary>
  </order>
</orders>
補足
表記 意味
XPath(".") XPathSelectで指定されているタグの中身を表示
XPath("xxx") XPathSelectで指定されているタグの直下にある「xxx」タグの中身を表示
XPath("@yyy") XPathSelectで指定されているタグの「yyy」要素の中身を表示
XPath("xxx/@yyy") XPathSelectで指定されているタグの直下にある「xxx」タグの「yyy」要素の中身を表示