0

假设我有一个类似于此的 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指定节点索引选择器“[???]” ?!?

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

编辑:我试过使用不同的索引“[{1}]”(给我一个索引越界错误),一个相对的Xpath“[local-name()='Phylum']”(没有“/ *" 在它前面——不识别节点/路径),并修补嵌套的转发器数据源(它要么不识别 XPath,要么崩溃)。

显然,我无法让这些工作中的任何一个工作。我需要考虑另一种方法吗?

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

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

1 回答 1

0

我终于想通了。我在这里找到了钥匙。

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

我通过引用 e.Item.Parent.Parent 获得了父中继器索引(其中“e”是一个 RepeaterItemEventArgs 对象)。

获得当前中继器及其父级的索引后,我就可以使用 {0} 和 {1} 作为索引,其余的由 String.format 完成。

瞧。 问题解决了。

于 2014-03-18T18:50:04.657 回答