Удаление пустых строк в документе XML

1

Мне нужно прочитать тело MSG файла и преобразовать его в XML файл. Я использовал приведенный ниже код для преобразования файла msg в xml файл. Я могу получить файл xml, но проблема в том, что пустые строки отображаются в выходном XML файле. Я использовал RegEx для удаления пустых строк из строки. Я могу видеть, что пустые строки удаляются из строки во время отладки. Но после загрузки этой строки в качестве 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>
Теги:
xslt
xml-documentation

1 ответ

2
Лучший ответ

вам не нужно использовать Regex для удаления пробелов. Вместо
1. Обрезать содержимое сообщения перед разбором как XDocument

string result = item.Body.Trim()

2. Укажите loadoptions как none вместо PreserveWhitespace.

XDocument.Parse(result,LoadOptions.None);

--SJ

  • 0
    Если я удаляю RegEx, я получаю ошибку «Данные на корневом уровне недействительны. Строка 5, позиция 1».
  • 0
    Вы можете показать свой файл сообщений? Я думал, что это может быть проблема пространства имен в корневом элементе.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню