如何使用XPath和ASP.NET中继器模拟外键?

如何使用XPath和ASP.NET中继器模拟外键?,asp.net,xpath,webforms,Asp.net,Xpath,Webforms,我正在学习Web表单,我正在尝试转换我一直在构建的订单表单。我学习了XmlDataSource来获取XML文件的源代码,并学习了Repeater来构建一个模板来表示数据,一切都很好 首先是我的XML工作原理示例,然后是问题: <items> <item id="sheet-1"> <name>Sheet the First</name> <price id="single" /> <

我正在学习Web表单,我正在尝试转换我一直在构建的订单表单。我学习了XmlDataSource来获取XML文件的源代码,并学习了Repeater来构建一个模板来表示数据,一切都很好

首先是我的XML工作原理示例,然后是问题:

<items>
    <item id="sheet-1">
        <name>Sheet the First</name>
        <price id="single" />
    </item>

    <item id="sheet-2">
        <name>Sheet the Second</name>
        <price id="double" />
    </item>
</items>

<costs>
    <cost id="single">.10</cost>
    <cost id="double">.20</cost>
    <cost id="triple">.30</cost>
</costs>
但我知道这种语法不太可能奏效


我不太清楚这个问题该怎么说。我相信我要做的是使用XPath和转发器的外键。这可能吗?如果没有,有什么替代方案可以达到我想要达到的目的?

假设您使用的是XDocument,并且您以这种方式绑定:

yourRepeater.DataSource = yourXDocument.Root.Element("items").Elements("item").ToList();
yourRepeater.DataBind();
您可以使用getCost方法:

protected String getCost(XElement xel) 
  {
   return xel
            .Parent
            .Parent
            .Element("costs")
            .Elements("cost")
            .Where(x=>x.Attribute("id").Value==xel.Element("price").Attribute("id").Value)
            .First().Value;
  }
然后试着这样做:

 <p class="cost-line">
    <%#this.getCost((XElement)Container.DataItem) %>
 </p>


如果您使用的是XDocument,并且您是以这种方式绑定的,希望这会有所帮助:

yourRepeater.DataSource = yourXDocument.Root.Element("items").Elements("item").ToList();
yourRepeater.DataBind();
您可以使用getCost方法:

protected String getCost(XElement xel) 
  {
   return xel
            .Parent
            .Parent
            .Element("costs")
            .Elements("cost")
            .Where(x=>x.Attribute("id").Value==xel.Element("price").Attribute("id").Value)
            .First().Value;
  }
然后试着这样做:

 <p class="cost-line">
    <%#this.getCost((XElement)Container.DataItem) %>
 </p>


希望这会有所帮助

有一个类似的问题,但答案对我没有帮助,因为这不是XSLT。有一个类似的问题,但答案对我没有帮助,因为这不是XSLT。不过,我不以这种方式绑定。我只是使用了
和XPath。是否可以将您所做的工作应用到该设置中?“整个计划对我来说都是新的。”布伦丹,你有没有试过这样的方法:?哇……真管用!你能解释一下为什么会这样吗?或者让我看一篇MSDN文章来解释它?谢谢!很高兴它成功了!事实上,带有XmlDataSource的repeater似乎与常规repeater工作得非常好,另外数据项是IXPathNavigatable的。下面的问题和答案可能会提供一些有价值的信息:不过,我不是这样绑定的。我只是使用了
和XPath。是否可以将您所做的工作应用到该设置中?“整个计划对我来说都是新的。”布伦丹,你有没有试过这样的方法:?哇……真管用!你能解释一下为什么会这样吗?或者让我看一篇MSDN文章来解释它?谢谢!很高兴它成功了!事实上,带有XmlDataSource的repeater似乎与常规repeater工作得非常好,另外数据项是IXPathNavigatable的。以下问题和答案可能会提供一些有价值的信息: