我有一个日志文件,其中包含数百/数千条单独的XML消息,需要根据给定的参数(节点值)找到提取完整xml消息的方法。
我最大的问题是,即使我编写了相当多的程序,但我很少接触XML或我使用的语言的XML库,并且不认为简单的文本解析会是一个优雅的解决方案!
我将在C#或VB.net中尝试这一点,我们将非常感谢任何帮助,并且任何解决方案的尝试都会更好!
提前感谢!
答案 0 :(得分:3)
编辑:下面的答案假定整个日志文件是有效的XML文档。如果不是这样,请忽略。
XPath可能就是你的答案 - 假设你可以一次性加载整个日志文件,使用XmlNode.SelectSingleNode或XNode.XPathSelectElement应该相当容易。
或者,如果你正在使用LINQ to XML,你可以构造一个LINQ查询 - 如果你不熟悉XPath,它可能更具可读性。
如果你想学习XPath,我通常会发现W3Schools教程非常好。
答案 1 :(得分:0)
一个非常基本的方法是:
这个解决方案不是最好的,我会打赌它会表现不佳,因为你会加载很多,虽然只有测试会知道。这种方法的好处在于文件不必是有效的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的结构。