2014-07-22 3 views
1

msg 파일의 본문을 읽고 xml 파일로 변환해야합니다. msg 파일을 xml 파일로 변환하기 위해 아래 코드를 사용했습니다. xml 파일을 가져올 수 있지만 출력 xml 파일에 빈 줄이 표시되는 문제가 있습니다. RegEx을 사용하여 문자열에서 빈 줄을 제거했습니다. 디버깅하는 동안 빈 줄이 문자열에서 삭제 된 것을 볼 수 있습니다. 하지만 XML 파일로 그 문자열을로드 한 후 xml 파일에 빈 줄을 가져 오는 중입니다. 견본 xml 파일의 이미지를 첨부했습니다. .msg 파일의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"); 
     } 

몸은 공백을 제거하는 정규식을 사용하지 않아도이

<?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. 대신 PreserveWhitespace의 없음으로하여 XDocument

string result = item.Body.Trim() 

2.specify loadoptions으로 분석하기 전에 메시지 내용을 낸다.

--SJ

+0

XDocument.Parse(result,LoadOptions.None); 
내가 오류 점점 정규식 스피을 제거하면 "루트 수준에서 데이터가 유효. 5 호선, 위치 1입니다." – user3859666

+0

메시지 파일을 표시 할 수 있습니까? 루트 요소의 네임 스페이스 문제 일 수 있다고 생각했습니다. –

+0

<= "1.0"인코딩 = 'ISO-8859-1'? XML 버전?> AP의 PAYMENTS 0002 0286-14 이 나는 ​​처리하려는 파일이다. 전체 XML 파일과 msg 파일 – user3859666