2014-07-22 173 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