2009-09-22 37 views
3

我有大量XML文件都包含相同的XML文檔,但具有不同的值。但是每個文件的結構都是一樣的。C#,XML查詢問題

在這個文件裏我有一個日期時間字段。

什麼是查詢這些XML文件的最好,最有效的方法?所以我可以檢索例如...所有文件的日期時間字段=今天的日期?

我使用C#和.net v2。我應該在文件搜索例程中使用XML對象來實現這個還是文本?

的某些代碼示例將是巨大的......或者只是一般的理論,什麼會有所幫助,謝謝...

+1

幾乎重複http://stackoverflow.com/questions/108010/parse-multiple-xml-files-with-asp-net-c-and-return-those-with-particular-eleme? – 2009-09-22 12:55:19

+0

什麼是通用文件大小,以及文件中的哪個位置可以找到日期時間值(文件有多遠) – 2009-09-22 12:56:43

回答

2

這取決於這些文件的大小以及數據的實際複雜程度。就我理解的問題而言,對於這種XML數據,使用XPath查詢並遍歷所有文件可能是最好的方法,可能會緩存文件以減少解析開銷。

看一看: XPathDocument中,XmlDocument的類和XPath查詢

http://support.microsoft.com/kb/317069

像這樣的東西應該做的(不,雖然測試):

XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable()); 
// if required, add your namespace prefixes here to nsmgr 
XPathExpression expression = XPathExpression.Compile("//element[@date='20090101']", nsmgr); // your query as XPath 
foreach (string fileName in Directory.GetFiles("PathToXmlFiles", "*.xml")) { 
    XPathDocument doc; 
    using (XmlTextReader reader = new XmlTextReader(fileName, nsmgr.NameTable)) { 
     doc = new XPathDocument(reader); 
    } 
    if (doc.CreateNavigator().SelectSingleNode(expression) != null) { 
     // matching document found 
    } 
} 

注意:當你還可以直接從URI /路徑加載XPathDocument,使用閱讀器確保使用相同的名稱表作爲用於編譯XPath查詢的名稱表。如果正在使用不同的名稱表,則不會從查詢中獲得結果。

+0

感謝這是一個很好的答案...正是我所需要的... – 2009-09-22 13:06:12

+0

感謝您接受它。然而,我想知道我是誰以及爲什麼被低估... – Lucero 2009-09-22 13:14:06

+0

令人驚訝的是,你被我貶低了,而不是故意的,我做了一個虛假的點擊,但是當我試圖糾正這個錯誤時,我收到一條消息:也是投票老將被改變....所以我想這是一個stackoverflow錯誤。對不起,真的不是故意的,謝謝你對這個答案的所有幫助,我的項目應該按時完成...... – 2009-09-22 15:31:51

1
+0

感謝這個例子似乎可以處理1個XML文檔,不知道是否有辦法處理多個文檔,獲取文件列表或至少他們的文件名? – 2009-09-22 12:47:15

1

如果完全有可能遷移到C#3.0/.NET 3.5,那麼LINQ-to-XML將是最簡單的選擇。

對於.NET 2.0,您會遇到XML對象或XSL。

+0

對不起,不能用.net v2 – 2009-09-22 12:51:55