仅从日志文件中读取 XML 内容

本文关键字:读取 XML 内容 文件 日志 | 更新日期: 2023-09-27 18:32:16

我有一个日志文件,它以XML格式存储数据。我想读取这些数据,但我遇到的问题是日志文件不是结构良好的XML文件。它包含一些额外的数据,如:

03/22/2013 : 13:23:32 <?xml version="1.0" encoding="UTF-8"?>
<element1>
...
...
...
</element1>

正如您会注意到的 03/22/2013 : 13:23:32 不允许我读取数据并抛出异常说"根级别的数据无效"

我使用以下方法来读取 XML

 XmlDocument doc = new XmlDocument();
            doc.Load("file.log");
            string xmlcontents = doc.InnerXml;
            label1.Text = xmlcontents;

请指导我完成解决方案,因为这对我来说很少见。我尝试在谷歌上搜索解决方案,但没有成功谢谢

仅从日志文件中读取 XML 内容

一个快速的技巧是解析日志文件以仅提取在根 xml 标记之间找到的文本,在您的情况下, 之间找到的文本。

您可以在 ?xml <搜索标签,> 后面的内容是您的根标签,然后继续使用。根据清晰结构的日志文件的可预测性,您可以制定更好的方法来执行此操作,但如果其他方法不起作用,则可以尝试这种方式。

var doc = new XmlDocument();
doc.LoadXml(string.Concat(File.ReadAllLines("file.log").Skip(1)));

重新组织 XML,以便日期成为元素或属性(如果文件太大)

也许您应该将整个文件读取为行数组 ( System.IO.File.ReadAllLines(string path) ),然后连接数组的元素跳过第一行和其余行,这不是 XML 结构的片段(假设您的示例只是输入文件的一部分)。

您可以跳过第一行

var onlyXml = (File.ReadAllLines("file.log")).Skip(1).SelectMany(l => l).ToArray();
var xmlContent = new String(onlyXml);
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlContent);
string xmlcontents = doc.InnerXml;
label1.Text = xmlcontents;

编辑

您只能在第一个"<"和最后一个">"之间获取 xml

var text = File.ReadAllText("file.log");
var beginIndex = text.IndexOf('<');
var endIndex = text.LastIndexOf('>');
var onlyXml = text.Substring(beginIndex, endIndex - beginIndex + 1);