2015-10-13 70 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