从日志文件中提取特定的XML消息

时间:2009-01-14 15:40:46

标签: c# xml vb.net

我有一个日志文件,其中包含数百/数千条单独的XML消息,需要根据给定的参数(节点值)找到提取完整xml消息的方法。

我最大的问题是,即使我编写了相当多的程序,但我很少接触XML或我使用的语言的XML库,并且不认为简单的文本解析会是一个优雅的解决方案!

我将在C#或VB.net中尝试这一点,我们将非常感谢任何帮助,并且任何解决方案的尝试都会更好!

提前感谢!

3 个答案:

答案 0 :(得分:3)

编辑:下面的答案假定整个日志文件是有效的XML文档。如果不是这样,请忽略。

XPath可能就是你的答案 - 假设你可以一次性加载整个日志文件,使用XmlNode.SelectSingleNodeXNode.XPathSelectElement应该相当容易。

或者,如果你正在使用LINQ to XML,你可以构造一个LINQ查询 - 如果你不熟悉XPath,它可能更具可读性。

如果你想学习XPath,我通常会发现W3Schools教程非常好。

答案 1 :(得分:0)

一个非常基本的方法是:

  1. 解析文件。您可以提取每个Xml消息并将其视为一个完整的文档。
  2. 根据参数查询xml并确定它是否匹配。
  3. 这个解决方案不是最好的,我会打赌它会表现不佳,因为你会加载很多,虽然只有测试会知道。这种方法的好处在于文件不必是有效的Xml。因此,如果解析正在写入的文件,您将能够使用此方法。 (我假设您的记录器只是将xml附加到文件中,而不是将其视为一个大dom)。

    如果文件没有被写入,并且根据大小,您可以将文件的内容包装在Xml节点中。同样,这假设写入文件的唯一内容是Xml。如果您记录了其他信息,那么您将不得不使用第一个解决方案。

    至于解析Xml,你有各种选项,如Linq到Xml或XPath。

答案 2 :(得分:0)

对于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的结构。