假设我有一个类似于这样的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')%>"
我终于想通了。我在这里找到了钥匙。
在做了大量的研究之后,我意识到XPath中的{0}谓词索引在后台代码中被调用String.format替换了。
我通过引用e.p item . parent . parent(其中"e"是一个RepeaterItemEventArgs对象)获得了父中继器索引。
一旦我有了当前中继器及其父节点的索引,我就可以使用{0}和{1}作为我的索引和String。格式完成了其余部分。
瞧。问题解决了