gpt4 book ai didi

c# - 在将 XML 绑定(bind)到转发器之前对其进行过滤和排序?

转载 作者:太空宇宙 更新时间:2023-11-03 20:42:37 26 4
gpt4 key购买 nike

在将 xml 绑定(bind)到转发器之前,我如何过滤、排序 xml?我有一个 xml 数据,我需要根据查询字符串对其进行过滤,然后在将其绑定(bind)到转发器之前对其进行排序。

我知道如何将 xml 与 repeater 绑定(bind)并且它也能正常工作,但我在基于查询字符串和排序的过滤方面遇到了问题。

真的很感激任何帮助吗?

我的XML是这样的

<Categories>   
<Category>
<Title>Food<Title>
<Date>12/1/2009</Date>
<Duration>12/1/2009-12/1/2011</Duration>
<Description>Who is hungry</Description>
<Category>
<Categories>

我想按日期和持续时间排序。我还想按标题过滤(基于查询字符串)。

最佳答案

LINQ to XML 可能是解决此问题的方法,但如果您停留在 2.0 领域,这将返回一个 XPathNodeIterator,它提供过滤和排序的 XML:

 // xPathFilter is a valid XPath expression
IEnumerable PrepareXml(XmlReader xmlReader, string xPathFilter)
{
XPathNavigator navigator = new XPathDocument(xmlReader).CreateNavigator();

// Compile is an XPathExpression factory method
XPathExpression expression = XPathExpression.Compile(xPathFilter);

// This sorts on the values of the selected nodes
// You might make an overload to let the caller specify different comparers
expression.AddSort(".", StringComparer.CurrentCulture);

return navigator.Select(expression);
}

请注意,如果您只需要过滤(而不是排序),您可以使用更简单的声明式 TemplateControl.XPathSelect就在您的 aspx 模板中(链接文档中的示例非常接近您的场景)。

XPathNodeIterator 实现了 IEnumerable,因此您可以直接将转发器绑定(bind)到它。要获取子节点中的值,请使用 TemplateControl.XPath方法,像这样(您还可以使用适当的 XPath 表达式获取属性或孙节点等):

 <ItemTemplate>
We have <%# XPath("Title") %> available starting on <%# XPath("Date") %>:<br />
<%# XPath("Description") %>
</ItemTemplate>

关于c# - 在将 XML 绑定(bind)到转发器之前对其进行过滤和排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com