C #, вопрос XML-запроса - PullRequest
       2

C #, вопрос XML-запроса

3 голосов
/ 22 сентября 2009

У меня есть тонны XML-файлов, каждый из которых содержит один и тот же XML-документ, но с разными значениями. Но структура одинакова для каждого файла.

Внутри этого файла у меня есть поле даты и времени.

Каков наилучший и наиболее эффективный способ запроса этих файлов XML? Так что я могу получить, например ... Все файлы, где поле datetime = сегодняшняя дата?

Я использую C # и .net v2. Должен ли я использовать объекты XML для достижения этого или текст в процедурах поиска файлов?

Некоторые примеры кода были бы хороши ... или просто общая теория, что-нибудь помогло бы, спасибо ...

Ответы [ 3 ]

2 голосов
/ 22 сентября 2009

Это зависит от размера этих файлов и сложности данных. Насколько я понимаю, для таких 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
    }
}

Примечание: хотя вы также можете загрузить XPathDocument непосредственно из URI / пути, использование средства чтения гарантирует, что используется та же таблица имен, что и для компиляции запроса XPath. Если бы использовалась другая таблица имен, вы не получили бы результаты запроса.

1 голос
/ 22 сентября 2009

Если вообще возможно перейти на C # 3.0 / .NET 3.5, LINQ-to-XML был бы безусловно самым простым вариантом.

В .NET 2.0 вы застряли либо с объектами XML, либо с XSL.

1 голос
/ 22 сентября 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...