2014-07-22 81 views
1

我需要讀取msg文件的主體並將其轉換爲xml文件。我使用下面的代碼將msg文件轉換爲xml文件。 我能夠獲取xml文件,但問題是空行顯示在輸出xml文件中。 我用RegEx刪除字符串中的空行。在調試過程中,我可以看到空白行從字符串中刪除。但是在將該字符串加載爲xml文件後,我在xml文件中獲得空白行。附上示例xml文件的圖像。刪除xml文檔中的空行

 string[] filePaths = Directory.GetFiles(@"C:\Projects\Userdata\Source Folder\", "*.msg"); 
     for (int i = 0; i < filePaths.Length; ++i) 
     { 

      string path = filePaths[i]; 
      string fname = System.IO.Path.GetFileName(path); 

      _Application outlook = new ApplicationClass(); 
      MailItem item = (MailItem)outlook.CreateItemFromTemplate(path, Type.Missing); 
      string b = item.Body; 
      string formatbody = System.Text.RegularExpressions.Regex.Replace(b, @"^\s+$[\r\n]*", "", RegexOptions.Multiline); 
      XDocument doc1 = XDocument.Parse(formatbody,LoadOptions.PreserveWhitespace); 
      var xs = doc1.Elements(); 
      string test = string.Empty; 
      foreach (var x in xs) 
      { 
       test += x.ToString(); 
      } 
      XmlDocument doc = new XmlDocument(); 
      doc.LoadXml(test); 
      doc.Save(@"C:\Projects\Destination Folder\" + fname + ".xml"); 
     } 

身體.msg文件看起來像這樣

<?xml version="1.0" encoding="iso-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="gateway_transaction_display.xsl"?> 

<File> 

    <File_Type>AP PAYMENTS</File_Type> 

    <File_Header_Record> 
    <File_Format_Version>0002</File_Format_Version> 
    <Creation_Module>0286-14</Creation_Module> 
    </File_Header_Record> 

<Transaction> 
<Transaction_Type>FT_TRANS_IMP</Transaction_Type> 
<Transaction_Header> 
    <Record_Number>1</Record_Number> 
    <Urgent>Y</Urgent> 
</Transaction_Header> 
<Model_Info> 
    <Model_ID><![CDATA[FF DOM INT PAY]]></Model_ID> 
</Model_Info> 
<Transfer_Info> 
    <Charges>15</Charges> 
</Transfer_Info> 
<Amounts> 
    <Transaction_Amount> 
    <Amount>4665786.22</Amount> 
    <Currency>CAD</Currency> 
    </Transaction_Amount> 
</Amounts> 
<Dates> 
    <Trusted_Source>Y</Trusted_Source> 
    <Value_Date>2014-03-31</Value_Date> 
</Dates> 
<Bank_Account> 
    <Bank_Account_Type>DR</Bank_Account_Type> 
    <Bank> 
    <Bank_Route_Code> 
     <Code_Type>Y</Code_Type> 
    </Bank_Route_Code> 
    </Bank> 
    <Account> 
    <Account_ID>FF01</Account_ID> 
    </Account> 
</Bank_Account> 
<Bank_Account> 
    <Bank_Account_Type>CR</Bank_Account_Type> 
    <Bank> 
    <Bank_Route_Code> 
     <Code_Type>Y</Code_Type> 
    </Bank_Route_Code> 

    </Bank> 
    <Account> 
    <Account_ID>D039</Account_ID> 
    </Account> 
</Bank_Account> 
<Payment_Details_Or_Addenda> 
    <Details_Text><![CDATA[Unapplied 
    cash &amp; intercompany settlemet]]></Details_Text> 
    </Payment_Details_Or_Addenda> 

    </Transaction> 

<File_Trailer_Record> 
<File_Name>AP PAYMENTS</File_Name> 
</File_Trailer_Record> 

</File> 

回答

2

你不需要使用正則表達式去除空白。相反
1.解析爲的XDocument

string result = item.Body.Trim() 

2.specify loadoptions因爲沒有替代PreserveWhitespace前修剪消息內容。

XDocument.Parse(result,LoadOptions.None); 

--SJ

+0

如果刪除正則表達式的IAM得到錯誤 「數據在根級別是無效的。第5行,位置1」。 – user3859666

+0

你能顯示你的消息文件嗎?我認爲這可能是根元素中的命名空間問題。 –

+0

<?XML版本= 「1.0」 編碼= 「ISO-8859-1」?> <?xml樣式表型= 「文本/ XSL」 HREF = 「gateway_transaction_display.xsl」?> AP PAYMENTS 0002 0286-14 這是我試圖處理該文件。你能告訴我如何添加圖像,如果你想看到完整的XML文件和msg文件 – user3859666