我在C#.NET應用程序中根據每個節點中的時間排序XML文檔的節點時遇到問題。我認爲我的問題是,我不知道如何正確構建指定要在其上執行排序的項目的XPathExpression。我需要一些幫助,指定要在我的XPathExpression AddSort()方法調用中使用的排序鍵
XML包含有關已運行批量作業的信息,包括每個作業的名稱,其運行狀態,啓動時間以及結束時間。
我的XML文檔的格式如下:
<results>
<result>
(Info on one job)
</result>
</results>
下面是一個作業結果節點的例子:
<result offset='14'>
<field k='job_name'>
<value h='1'><text>Y_RUNNING_3</text></value>
</field>
<field k='job_did_start'>
<value><text>08-01-2012 04:00:00</text></value>
</field>
</result>
我爲幾個不相關的字段省略的值。每個字段都被命名爲「字段」並具有使用屬性「k」指定的字段的名稱。 (我沒有設計XML格式。)
在我的代碼中,我成功地使用XPathDocument和XPathNavigator加載XML文檔而不對其進行排序。然而,我需要用「k」屬性設置爲「job_did_start」來對字段值進行排序。
下面是部分代碼:
XPathDocument doc = new XPathDocument(strFilepath);
XPathNavigator nav = doc.CreateNavigator();
XPathExpression selectExpression = nav.Compile("/results/result"); // QQQ not sure about this
// XPathExpression sortExpression = nav.Compile("//@k='job_did_start'");
// selectExpression.AddSort(sortExpression, new DateTimeComparer());
foreach (XPathNavigator item in nav.Select(selectExpression))
{
item.MoveToFirstChild();
do
{
**I’ve omitted the code here because it works and probably is not relevant.**
} while (item.MoveToNext());
}
我註釋掉設置的SortExpression和那的SortExpression添加到selectExpression,因爲他們沒有工作線。
I THINK我需要做的就是找出設置sortExpression的語句中傳遞給nav.Compile()的字符串的值。
順便說一句,這裏是DateTimeComparer,我從網上的其他地方借用。我在Compare()方法中設置了一個斷點,以確認對象x和y不是代表日期的字符串,但這就是他們需要的。
public class DateTimeComparer : IComparer
{
public int Compare(object x, object y)
{
DateTime dt1 = DateTime.Parse(x.ToString());
DateTime dt2 = DateTime.Parse(y.ToString());
return dt1.CompareTo(dt2);
}
}
因爲「job_did_start」值可以是一個空字符串,我可能需要考慮的比較()方法的可能性。
那麼有人可以幫我正確設置排序鍵嗎?
謝謝。