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

C# 从日志文件中提取特定的XML消息,c#,xml,vb.net,C#,Xml,Vb.net,我有一个日志文件,其中包含成百上千条单独的XML消息,需要根据给定的参数(节点值)找到一种方法来提取完整的XML消息 我最大的问题是,尽管我编写了相当多的程序,但我几乎没有接触过XML或我使用的语言的XML库,我不认为简单的文本解析是一个优雅的解决方案 我将在C#或VB.net中尝试这一点,任何帮助都将不胜感激,任何解决方案的尝试都会更好 提前谢谢 编辑:下面的答案假设整个日志文件是有效的XML文档。如果不是这样,请忽略 XPath可能是您的答案——假设您能够一次性加载整个日志文件,那么它应该非

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

我最大的问题是,尽管我编写了相当多的程序,但我几乎没有接触过XML或我使用的语言的XML库,我不认为简单的文本解析是一个优雅的解决方案

我将在C#或VB.net中尝试这一点,任何帮助都将不胜感激,任何解决方案的尝试都会更好


提前谢谢

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

XPath可能是您的答案——假设您能够一次性加载整个日志文件,那么它应该非常易于使用或使用

或者,如果您使用LINQtoXML,您可以构造一个LINQ查询——如果您不熟悉XPath,那么这个查询可能更可读


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

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

XPath可能是您的答案——假设您能够一次性加载整个日志文件,那么它应该非常易于使用或使用

或者,如果您使用LINQtoXML,您可以构造一个LINQ查询——如果您不熟悉XPath,那么这个查询可能更可读


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

一个非常基本的方法是:

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

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


    至于解析Xml,您有多种选择,如Linq到Xml或XPath

    一个非常基本的方法是:

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

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


    至于解析Xml,您有多种选择,如Linq到Xml或XPath

    对于LINQ到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
    
    dimXML为XDocument=XDocument.Load(“Messages.xml”)
    Dim messages=来自xml格式的消息。。选择味精
    对于消息中的每个m
    Console.WriteLine(m.Value.ToString)
    下一个
    

    当然,必须对其进行修改以适应XML的结构。

    对于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
    
    dimXML为XDocument=XDocument.Load(“Messages.xml”)
    Dim messages=来自xml格式的消息。。选择味精
    对于消息中的每个m
    Console.WriteLine(m.Value.ToString)
    下一个
    
    当然,这需要修改以适应XML的结构