如何使用XPath和ASP.NET中继器模拟外键?
我正在学习Web表单,我正在尝试转换我一直在构建的订单表单。我学习了XmlDataSource来获取XML文件的源代码,并学习了Repeater来构建一个模板来表示数据,一切都很好 首先是我的XML工作原理示例,然后是问题:如何使用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" /> <
<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的。以下问题和答案可能会提供一些有价值的信息: