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

时间:2013-09-20 08:47:36

标签: c# xml

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

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

正如您将注意到2013年3月22日:13:23:32不允许我读取数据并抛出异常说“根级别的数据无效”

我使用以下方法来读取XML

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

请指导我完成解决方案,因为这对我来说是一个罕见的案例。我尝试使用谷歌搜索解决方案,但无法成功 感谢

4 个答案:

答案 0 :(得分:1)

快速破解就是解析日志文件,只提取在根xml标记之间找到的文本,在你的情况下,在&lt;元素1&GT;和&lt; /元素1&GT;

您可以搜索标签&lt; ?xml,后面会发生什么?&gt;是你的根标签,然后继续。根据日志文件结构清晰的可预测性,您可以制定更好的方法,但如果没有其他方法可行,您可以尝试这种方式。

答案 1 :(得分:0)

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

重新组织您的XML,因此如果文件太大,则日期将变为元素或属性

答案 2 :(得分: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;

修改

你可以在第一个'&lt;'之间只获得xml最后'&gt;'

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

答案 3 :(得分:0)

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