2015-10-13 73 views
0

我需要分离下面的信息,只取出XML,我试图找出最有效的方法来做到这一点。我不确定从删除前三行开始,以及获取XML DTD的方法。在我的脑海里,我一直在想,最好的办法是忽略/删除3行,直到用'<'打开XML标签,但我不确定是否应该把它放在一个巨大的字符串中?老实说,任何事情都会有所帮助,我被困住了这个坏男孩,我相信这不会像我想要的那样艰难,但我被卡住了。非常感谢你!使用C#将日志文件解析到XML中

编辑:这是一个.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 
+0

它看起来像你使用HTML文档中的错误属性。您可能正在使用OuterXML而不是Body Innertext。前三行文本是HTML标题,最后一行是HTML的状态。 – jdweng

回答

0

最简单的方法将得到<第一指数和>串的最后一个索引文件并让.Net Xml Parser完成它的工作。

但我不确定它是否是最快的方法。

XML解析类已经回答了here

+0

只是一个想法, 也许将文件分割成行更快,并检查每一行StartsWith('<')。这样你不会遍历文本文件 –

+0

@ Y.S中的所有字符。是的,你是对的。但是如果他知道页面底部总是有一个“HTML Response Code”,他可以从最后遍历文件找到最后一个索引,这可能会更快。 – JoeJoe87577

+0

@ JoeJoe87577我正在考虑这样做,或者Y.S说要做的事情,这只是一个速度问题,我会尝试两种方式,让你知道这是怎么回事! – donwoncruton

0

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

 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。

+0

这工作成功了,你能解释一下这个字符串在开始时代表什么吗?我想我明白这一点,但我希望得到一个解释,所以我可以通过整个文件来实现这一点。 – donwoncruton

+0

'<\?xml.*\?>'强制正则表达式查找以'<?xml'开头的字符串可以在中间有任何东西,并以'?>'结尾。 ' '(?。*)'标记一个名称为“Xml”的组,其中允许任何字符。 'HTTP /'强制正则表达式找到一个停止将字符放在组“Xml”中。 希望完美的帮助。 – Fischermaen