2014-03-12 40 views
0
指定的XPath节点指标

比方说,我有一个XML的层次结构,看起来与此类似:嵌套中继

<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> 

<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代码

我的问题:我如何指定节点索引选择器“[???]”为嵌套中继器内的XPath?!?

注意:我的语言是ASP.NET内的VB。我试过使用不同的索引“[{1}]”(给我一个索引越界错误),相对Xpath“[local-name()='Phylum' ]“(在它之前的”no“/ *) - 不能识别节点/路径),并修改嵌套的中继器数据源(它不能识别XPath或崩溃)。

显然,我还没有能够得到任何这些工作。我需要考虑另一种方法吗?

编辑#2:另一件事我想,不想工作:为嵌套转发:

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

回答

0

我终于想通了这一点。我找到了钥匙here

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

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

一旦我有了当前中继器及其父代的索引,我就可以使用{0}和{1}作为我的索引,而String.format完成了剩下的工作。

Voila。问题解决了。