Извлечь определенное сообщение XML из файла журнала - PullRequest
0 голосов
/ 14 января 2009

У меня есть файл журнала, который содержит сотни / тысячи отдельных сообщений XML, и мне нужно найти способ извлечь полное сообщение XML в зависимости от заданных параметров (значений узлов).

Моя самая большая проблема заключается в том, что, хотя я программирую достаточно много, у меня было очень мало контактов с XML или библиотеками XML языков, которые я использую, и я не думал, что простой анализ текста будет элегантным решением!

Я собираюсь попробовать это в C # или VB.net, любая помощь будет высоко ценится, и любая попытка найти решение будет еще лучше!

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 14 января 2009

РЕДАКТИРОВАТЬ: Ответ ниже предполагает, что весь файл журнала является действительным документом XML. Проигнорируйте, если это не так.

XPath, вероятно, является вашим ответом здесь - при условии, что вы можете позволить себе загрузить весь файл журнала за один раз, оно должно быть довольно простым в использовании XmlNode.SelectSingleNode или XNode.XPathSelectElement .

В качестве альтернативы, если вы используете LINQ to XML, вы можете создать запрос LINQ, который может быть более читабельным, если вы не знакомы с XPath.

Если вы хотите изучать XPath, я обычно считаю учебник по W3Schools довольно хорошим.

0 голосов
/ 14 января 2009

Для LINQ to XML, что-то похожее на это:

Dim xml As XDocument = XDocument.Load("Messages.xml")
Dim messages = From msg In xml.<Messages>.<Message> Select msg

For Each m In messages
  Console.WriteLine(m.Value.ToString)
Next

Конечно, это придется изменить, чтобы соответствовать структуре вашего XML.

0 голосов
/ 14 января 2009

Очень простой подход:

  1. Разобрать файл. Вы можете извлечь каждое сообщение XML и обработать его как один полный документ.
  2. На основе параметров запросить xml и определить, соответствует ли он.

Это решение не самое лучшее, я бы поспорил, что оно будет работать плохо, поскольку вы будете загружать довольно много, хотя об этом будет знать только тестирование. Этот подход имеет преимущество в том, что файл не обязательно должен быть действительным Xml. Поэтому, если вы анализируете файл, в который вы пишете, вы сможете использовать этот метод. (Я предполагаю, что ваш регистратор просто добавляет xml в файл, а не рассматривает это как один большой домен).

Если файл тоже не записывается, и в зависимости от размера вы можете поместить содержимое файла в узел Xml. Опять же, это предполагает, что единственное, что записано в файл - это Xml. Если вы регистрируете дополнительную информацию, вам нужно будет выбрать первое решение.

Что касается синтаксического анализа Xml, у вас есть различные варианты, такие как Linq to Xml или XPath.

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