I apoligize, I misunderstood your post then. The short answer is to use a nested repeater. I was not able to get a Kentico Basic Repeater to work in my case so I used a standard <asp:Repeater>
control.
Here's the long answer with some code samples.
Here's my XML:
<featured_rates>
<GROUPS>
<GROUP>
<NAME>FIXED RATE PRODUCTS</NAME>
<PRODUCT>
<DESCR>30 Year Fixed Rate</DESCR>
<RATE>3.875</RATE>
<APR>3.919</APR>
<POINTS>0</POINTS>
<PAYMENT_STREAM_URL>
https://URL.com/PaymentStream.aspx?CobranderId=1002&CriteriaId=119814037&ResultId=19
</PAYMENT_STREAM_URL>
</PRODUCT>
</GROUP>
</GROUPS>
</featured_rates>
Here is what I did with a plain <asp:Repeater>
and an <asp:XMLDataSource>
:
<asp:XmlDataSource ID="dsXml" runat="server" />
<asp:Repeater ID="rptItems" runat="server" DataSourceID="dsXml">
<HeaderTemplate>
<table class="graytable">
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td colspan="3"><h3><%# XPath("NAME")%></h3></td>
</tr>
<asp:Repeater ID="rptReplacementFunds" runat="server" DataSource='<%# XPathSelect("PRODUCT") %>'>
<ItemTemplate>
<tr>
<td <%# (Container.ItemIndex % 2 == 0 ? " class='even' " : "") %>colspan="3"><h4><%# XPath("DESCR") %></h4></td>
</tr>
<tr>
<td <%# (Container.ItemIndex % 2 == 0 ? " class='even' " : "") %>>Rate</td>
<td <%# (Container.ItemIndex % 2 == 0 ? " class='even' " : "") %>>APR</td>
<td <%# (Container.ItemIndex % 2 == 0 ? " class='even' " : "") %>>Points</td>
</tr>
<tr>
<td <%# (Container.ItemIndex % 2 == 0 ? " class='even' " : "") %>><%# XPath("RATE") %>%</td>
<td <%# (Container.ItemIndex % 2 == 0 ? " class='even' " : "") %>><%# XPath("APR") %>%</td>
<td <%# (Container.ItemIndex % 2 == 0 ? " class='even' " : "") %>><%# XPath("POINTS") %>%</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
<FooterTemplate>
<tbody>
</table>
</FooterTemplate>
</asp:Repeater>
Code behind:
/// <summary>
/// On content loaded override.
/// </summary>
public override void OnContentLoaded()
{
base.OnContentLoaded();
SetupControl();
}
/// <summary>
/// Initializes the control properties.
/// </summary>
protected void SetupControl()
{
if (StopProcessing)
{
// Do nothing
}
else
{
dsXml.DataFile = DataFile; // this is the URL of the XML feed
dsXml.XPath = DataXPath; // this is the level in the XML I want to start selection from. In my case //FEATURED_RATES/GROUPS/GROUP
}
}