假设我有一个类似于此的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')%>"
答案 0 :(得分:0)
我终于弄明白了。我找到了密钥here。
经过大量挖掘后,我意识到我的XPath中的{0}谓词索引正在使用对String.format的调用在代码隐藏中被替换。
我通过引用e.Item.Parent.Parent获取了父转发器索引(其中&#34; e&#34;是RepeaterItemEventArgs对象)。
一旦我获得了当前转发器及其父级的索引,我就可以使用{0}和{1}作为索引,而String.format则完成了其余的工作。
Voila。问题解决了。