2009-12-22 38 views
1

如何在綁定到中繼器之前過濾和排序xml? 我有一個XML數據,我需要在查詢字符串的基礎上進行過濾,然後在將它綁定到中繼器之前進行分類。將XML綁定到中繼器之前對其進行過濾和排序?

我知道如何綁定xml與轉發器,它的工作也很好,但我面臨着基於查詢字符串和排序過濾問題。

任何幫助真的不勝感激?

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

我想按日期和時間進行排序。我也想按標題過濾(基於查詢字符串)。

+2

您使用什麼語言? – Asaph 2009-12-22 19:22:45

+0

我正在使用C#來實現此操作 – 2009-12-22 19:29:24

+1

添加一些示例XML,並給我們一個過濾示例。過濾是基於屬性,元素名稱,值等嗎?同時讓我們知道您使用的是哪個.NET版本。 – 2009-12-22 21:22:00

回答

3

的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 implements IEnumerable,所以你可以直接綁定中繼器。要在子節點獲取值,使用TemplateControl.XPath方法,像這樣(你也可以得到屬性或盛大子節點等,用適當的XPath表達式):

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

謝謝傑夫其工作正常過濾和排序,但如何綁定xpathnodeiterator中繼?你能幫我那 – 2009-12-22 23:08:08

+0

我想迭代每個節點,並把它放在一些arraylist或數據表可以解決這個問題。讓我試試將發佈結果 – 2009-12-22 23:12:06

+1

Howdy AB - 我已經更新,澄清你可以直接綁定到' XPathNodeIterator',並添加了一個演示如何通過它訪問節點值的示例。 – 2009-12-23 14:22:40

2

我將使用LINQ to XML的內置功能來處理過濾&排序。這裏是做complex filtering的鏈接。這是一個顯示如何做簡單的sorting

結合這兩種技術,而不是將控件綁定到XML數據源,而是綁定到從最終的LINQ到XML處理的結果集合。

對於一些很好的LINQ to XML樣本去here

相關問題