【问题标题】:Parsing Log File into XML using C#使用 C# 将日志文件解析为 XML
【发布时间】:2015-10-13 07:10:09
【问题描述】:

我需要将下面的信息分开,只取出 XML,我试图找出最有效的方法来做到这一点。关于删除前 3 行并获取 XML DTD,我不确定从什么方法开始。在我的脑海中,我在想最好的方法是忽略/删除这 3 行,直到用“

编辑:这是一个 .log 文件

这是示例文本文档:

VCS (1.0.11.111): [10/9/2015 12:00:02 AM]
POST https://ex.sample.com/samp/x/sample
Content-Type: application/x-www-form-urlencoded
<?xml version="1.0" encoding="UTF-8"?>
    <command name="sample name_" signature="some stuff" address="sample.com">
    <param name="CurrentVersion">1111</param>
    <param name="MotherboardName">Dell Inc. PowerEdge R420</param>
</command>
HTTP/1.1 200 OK

【问题讨论】:

  • 您似乎使用了 html 文档中的错误属性。您可能使用的是 OuterXML 而不是 Body Innertext。前 3 行文本是 HTML Header,最后一行是 HTML 的状态。

标签: c# xml linq parsing


【解决方案1】:

最简单的方法是获取&lt; 的第一个索引和&gt; 的最后一个索引子字符串,然后让.Net Xml Parser 完成它的工作。

但我不确定这是否是最快的方式。

XML Parsing to class 已回答here

【讨论】:

  • 只是一个想法,也许将文件拆分为行会更快,并检查每一行 StartsWith('
  • @Y.S 是的,你是对的。但是如果他知道页面底部总是有一个HTML Response Code,他可以从末尾迭代文件以找到最后一个索引,也许这会更快。
  • @JoeJoe87577 我正在考虑这样做,或者 Y.S 说的那样,这只是速度问题,我会尝试两种方式,让你知道这是怎么回事!跨度>
【解决方案2】:

使用一些正则表达式怎么样?试试这个:

        var regex = new Regex(@"<\?xml.*\?>(?<Xml>.*)HTTP/", RegexOptions.Singleline);

        var match = regex.Match(inputString);

        if (match.Success)
        {
            var xmlResult = match.Groups["Xml"].Value;
        }

您将在变量 xmlResult 中拥有所有 xml。

【讨论】:

  • 这很成功,你能解释一下字符串在开头代表什么吗?我想我理解它,但我希望得到它背后的解释,以便我可以通过整个文件来实现它。
  • '' 强制正则表达式查找以 '' 结尾。 '(?.*)' 标记名称为“Xml”的组,其中允许任何字符。 'HTTP/' 强制正则表达式找到它作为将字符放入组“Xml”的停止。希望解释有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多