我有大量的XML文件都包含相同的XML文档,但具有不同的值。但是每个文件的结构都是一样的。
在这个文件里面我有一个日期时间字段。
查询这些XML文件的最佳,最有效的方法是什么?所以我可以检索例如...所有日期时间字段=今天日期的文件?
我正在使用C#和.net v2。我应该使用XML对象来实现此目的还是文件搜索例程中的文本?
一些代码示例会很棒......或者只是一般理论,任何事情都会有所帮助,谢谢......
答案 0 :(得分: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查询的名称表。如果使用了不同的名称表,则不会从查询中获得结果。
答案 1 :(得分:1)
您可以考虑运行XSL queries。另请参阅XSLT Tutorial,XML transformation using Xslt in C#,How to query XML with an XPath expression by using Visual C#。
此问题还涉及Stack Overflow上的另一个问题:Parse multiple XML files with ASP.NET (C#) and return those with particular element。不过,accepted answer there建议使用Linq。
答案 2 :(得分:1)
如果完全可以转移到C#3.0 / .NET 3.5,LINQ-to-XML将是迄今为止最简单的选择。
使用.NET 2.0,你会遇到XML对象或XSL。