-1

我有一个以 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;

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

4

4 回答 4

1

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

您可以搜索标签 < ?xml,然后 ?> 是您的根标签,然后继续。根据日志文件结构清晰的可预测程度,您可以制定更好的方法来执行此操作,但如果没有其他方法,您可以尝试这种方式。

于 2013-09-20T08:51:28.433 回答
0
var doc = new XmlDocument();
doc.LoadXml(string.Concat(File.ReadAllLines("file.log").Skip(1)));

如果文件太大,请重新组织您的 XML,使日期成为元素或属性

于 2013-09-20T08:58:47.643 回答
0

您可以跳过第一行

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);
于 2013-09-20T08:58:51.410 回答
0

也许您应该将整个文件读取到行数组System.IO.File.ReadAllLines(string path)

于 2013-09-20T08:59:39.073 回答