为嵌套转发器指定XPath节点索引

时间:2014-03-12 20:47:32

标签: asp.net xpath indexing selectnodes nested-repeater

假设我有一个类似于此的XML层次结构:

<Animal>
    <Kingdom>
        <Phylum>
            <Class></Class>
            <Class></Class>
        </Phylum>
        <Phylum>
            <Class></Class>
            <Class></Class>
        </Phylum>
    </Kingdom>
    <Kingdom>
        <Phylum>
            <Class></Class>
            <Class></Class>
        </Phylum>
    </Kingdom>
</Animal>

(etc.)

同样,我使用嵌套转发器使用ASP.NET代码,如下所示:

<asp:Repeater ID="ShowKingdom" runat="server" DataSource="(SomeDataSource)">
    <ItemTemplate>
        <asp:TextBox ID="txtKingdom" runat="server" XPath="/*[local-name()='Animal']/*[local-name()='Kingdom'][{0}]">
        <asp:Repeater ID="ShowPhylum" runat="server" OnItemDataBound="(SomeDataBinder)">
            <ItemTemplate>
                <asp:TextBox ID="txtKingdom" runat="server" XPath="/*[local-name()='Animal']/*[local-name()='Kingdom'][{0}]/*[local-name()='Phylum'][???]">
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

我的问题:如何为嵌套转发器中的XPath指定节点索引选择器&#34; [???]&#34; ?!

注意:我的语言是ASP.NET中的VB。

修改:我尝试过使用其他索引&#34; [{1}]&#34; (给我一个索引越界错误),一个相对的Xpath&#34; [local-name()=&#39; Phylum&#39;]&#34; (no&#34; / *&#34;在它之前 - 不识别节点/路径),并修改嵌套的转发器数据源(它不能识别XPath或崩溃)。

显然,我还没有能够让这些工作起作用。我需要考虑另一种方法吗?

编辑#2:我试过的另一件事不想工作:对于嵌套转发器:

DataSource="<%# XPathSelect('Phylum')%>"

1 个答案:

答案 0 :(得分:0)

我终于弄明白了。我找到了密钥here

经过大量挖掘后,我意识到我的XPath中的{0}谓词索引正在使用对String.format的调用在代码隐藏中被替换。

我通过引用e.Item.Parent.Parent获取了父转发器索引(其中&#34; e&#34;是RepeaterItemEventArgs对象)。

一旦我获得了当前转发器及其父级的索引,我就可以使用{0}和{1}作为索引,而String.format则完成了其余的工作。

Voila。问题解决了。