【问题标题】:C#, XML Query QuestionC#, XML 查询问题
【发布时间】:2009-09-22 21:00:37
【问题描述】:

我有大量的 XML 文件,它们都包含相同的 XML 文档,但具有不同的值。但是每个文件的结构都是相同的。

在这个文件中,我有一个日期时间字段。

查询这些 XML 文件最好、最有效的方法是什么?所以我可以检索例如...日期时间字段 = 今天日期的所有文件?

我正在使用 C# 和 .net v2。我应该使用 XML 对象还是文件搜索例程中的文本来实现这一点?

一些代码示例会很棒...或者只是一般理论,任何东西都会有所帮助,谢谢...

【问题讨论】:

标签: c# xml


【解决方案1】:

这取决于这些文件的大小,以及数据的实际复杂程度。据我了解,对于这种 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 查询的名称表相同的名称表。如果使用了不同的名称表,您将无法从查询中获得结果。

【讨论】:

  • 令人惊讶的是你被我否决了,我也不是故意的,我做了一个错误的点击,但是当我试图纠正这个错误时,我收到一条消息:投票太旧,无法更改...... .所以我猜这是一个stackoverflow错误。抱歉真的不是故意的,感谢您对这个答案的所有帮助,我的项目应该按时完成......
【解决方案2】:

【讨论】:

  • 感谢该示例似乎适用于 1 个 XML 文档,想知道是否有一种方法可以处理多个文档,以获取文档列表或至少它们的文件名?
【解决方案3】:

如果完全可以迁移到 C# 3.0 / .NET 3.5,那么 LINQ-to-XML 将是迄今为止最简单的选择。

使用 .NET 2.0,您会被 XML 对象或 XSL 困住。

【讨论】:

  • 抱歉 - 不,卡在 .net v2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多