2015-06-22 1 views
0

я пытаюсь создать это:получения имитирующих StartDocument в состоянии Конца документ приведет к недействительному документу XML

<?xml version="1.0" encoding="utf-8" ?> 
<GetsafeActivitiesResponse xmlns="http://ggg.co.il"> 
<GetSafeActivitiesResult> 
<ListofStrings> 
    <string> 
    <timestamp>2015 03:44:11</timestamp> 
    <user>bbbbb</user> 
    <code>ccdcdcd</code> 
    </string> 
</ListofStrings> 
<returncode>55555</returncode> 
<returnMSG>sssss</returnMSG> 
</GetSafeActivitiesResult> 
</GetsafeActivitiesResponse> 

мой код выглядит следующим образом:

XmlWriterSettings settings = new XmlWriterSettings(); 
      settings.ConformanceLevel = ConformanceLevel.Fragment; 
      settings.Indent = true; 
      StringBuilder sb = new StringBuilder(); 
      XmlWriter writer = XmlWriter.Create(sb, settings); 

      foreach (ActivityLogRecord activity in safeActivities) 
       { 
        if (activity.Info1.ToLower().Contains(FileName.ToLower())) 
        { 
         string activityCode = ""; 
         string direction = "Unknown"; 
         string direction = "ddd"; 

         writer.WriteStartDocument(); 
         writer.WriteStartElement("GetSafeActivitiesResult"); 
         writer.WriteStartElement("ListOfStrings",""); 

         int i = 0; 
         while (results.Length > i) 
         { 
          writer.WriteStartElement("string"); 
          writer.WriteStartElement("outFileName"); 
          writer.WriteString(FileName); 
          writer.WriteEndElement(); 
          writer.WriteStartElement("activityTmStamp"); 
          writer.WriteString(activity.Time.ToString()); 
          writer.WriteEndElement(); 
          writer.WriteStartElement("userName"); 
          writer.WriteString(activity.UserName); 
          writer.WriteEndElement(); 
          writer.WriteStartElement("ActionID"); 
          writer.WriteString(activityCode); 
          writer.WriteEndElement(); 
          writer.WriteStartElement("direction"); 
          writer.WriteString(direction); 
          writer.WriteEndElement(); 
          writer.WriteStartElement("path"); 
          writer.WriteString(activity.Info1); 
          writer.WriteEndElement(); 
          writer.WriteEndElement(); 

          //results[i] = string.Format("<acivityTmStamp>{0}</acivityTmStamp><username>{1}</username><ActionID>{2}</ActionID><direction>{3}</direction><path>{4}</path>", activity.Time, activity.UserName, activityCode, direction, activity.Info1); 

          i++; 
         } 

         writer.WriteEndElement(); 

         writer.WriteStartElement("retunCode"); 
         writer.WriteString("000"); 
         writer.WriteEndElement(); 
         writer.WriteStartElement("retunMessage"); 
         writer.WriteString("000"); 

         writer.WriteEndElement(); 


         writer.WriteEndElement(); 
         writer.WriteEndDocument(); 
         writer.Flush(); 

        } 
       } 

      returnErrorCode = "005"; 
      if (safe != null) 
       safe.Dispose(); 

      if (Vault.Current.IsLoggedOn()) 
       UserSession.Logoff(); 

      returnErrorCode = "006"; 
      XmlDocument xmlOut = new XmlDocument(); 
      xmlOut.LoadXml(sb.ToString()); 
      writer.Close(); 
      return xmlOut.InnerXml.ToString(); 

     } 
     catch (Exception ex) 
     { 
      this.LogWrite("GetSafeActivities", string.Format("Operation has failed: {0}", ex.Message), Session.SessionID, true); 
      return string.Format("<ReturnCode>{0}</ReturnCode><ReturnMSG>{1}</ReturnMSG>", returnErrorCode, ex.Message) ;    
     } 

когда я пытаюсь и запустить код VIS IIS я получаю сообщение об ошибке:

<?xml version="1.0" encoding="UTF-8"?> 
<string xmlns="http://www.securenet.co.il"><ReturnCode>004</ReturnCode><ReturnMSG>Token StartDocument in state End Document would result in an invalid XML document.</ReturnMSG></string 

я DOUBL e проверил, что все открывается и закрывается правильно.

+0

Ваш код не создает структуру xml в вашем примере. В вашем коде элемент 'ListofStrings' также содержит'returncode' и' retunMessage'. –

+0

спасибо, я исправил это, но все равно имею ту же ошибку. –

+0

Вы пытаетесь создать XML-документ с несколькими корневыми элементами? Поскольку действительный XML должен иметь один и только один [корневой элемент] (https://en.wikipedia.org/wiki/Root_element). – dbc

ответ

1

Проблема в том, что вам нужно переместить создание элемента документа и корня вне цикла:

  writer.WriteStartDocument(); 
      writer.WriteStartElement("GetSafeActivitiesResult"); 

      foreach (ActivityLogRecord activity in safeActivities) 
      { 
       if (activity.Info1.ToLower().Contains(FileName.ToLower())) 
       { 
        // Write out the activity information 
       } 
      } 

      writer.WriteEndElement(); 
      writer.WriteEndDocument(); 
      writer.Flush(); 

В противном случае, если у вас есть несколько файлов, которые соответствуют критерию activity.Info1.ToLower().Contains(FileName.ToLower()), то вы попытаетесь создать XML-документ с несколькими root elements, что запрещено стандартом XML.

+0

спасибо, человек, ты мне очень помог. –

0

XML чувствителен к регистру. Попробуйте корректировки ниже

<?xml version="1.0" encoding="utf-8" ?> 
<GetsafeActivitiesResponse xmlns="http://ggg.co.il"> 
    <GetSafeActivitiesResult> 
    <ListofStrings> 
     <string> 
     <timestamp>2015 03:44:11</timestamp> 
     <user>bbbbb</user> 
     <code>ccdcdcd</code> 
     </string> 
    </ListofStrings> 
    <returncode>55555</returncode> 
    <returnMSG>sssss</returnMSG> 
    </GetSafeActivitiesResult> 
</GetsafeActivitiesResponse> 
​ 
+1

Это конечный результат, который я хочу достичь, я написал его в виде простого текста. Я до сих пор не получаю это от своего кода. –

+0

Вы можете проверить XML, выполнив следующие действия в VS: 1) Меню: Проект: Добавить новый элемент: XML-файл. 2) Вставьте вам XML-код в окно, чтобы сохранить одну копию идентификатора XML-строки 1. Убедитесь, что идентификатор XML начинается в строке 1 столбца 1. 3) Откройте окно «Список ошибок». Ошибки будут отображаться в окне. исправить при необходимости. Представление имеет встроенную схему, которая поможет вам исправить ошибки. – jdweng

Смежные вопросы