2015-03-24 4 views
0

Привет вам возможно создать Dynamica XML с XDocument я пытался, но оказывается, что она возвращает исключение о том, неправильную структуруСоздание динамического XML-документа

Мой код следующий

public string ReadTest(Stream csvFile) 
     { 
      XDocument responseXml = new XDocument(new XDeclaration("1.0", "utf-8", "yes")); 

      try 
      { 
       if (csvFile != null || csvFile.Length!=0) 
       { 
        responseXml.Add(new XElement("root")); 

        //using(CsvFileReader reader=new CsvFileReader(File.OpenRead(@"C:\Users\toshibapc\Documents\Visual Studio 2013\Projects\WCFLecturaCSV\WCFLecturaCSV\App_Data\archivo.csv"))){ 
        using (CsvFileReader reader = new CsvFileReader(csvFile)) 
        { 

         CsvRow row = new CsvRow(); 
         List<String> headers = new List<string>(); 


         while (reader.ReadRow(row)) 
         { 
          int cont = 0; 

          XElement dato = new XElement("AccountInfos", new XElement("Info")); 
          XElement datos=null; 
          foreach (String s in row) 
          { 
           if(s.Equals("AccountIDToMove", StringComparison.OrdinalIgnoreCase)|| s.Contains("AccountNameToMove") || s.Contains("NewParentAccountID") || s.Contains("NewParentAccountName")){ 
            headers.Add(s);          
           } 
           else{ 
            if (s != String.Empty) 
            { 
             datos = new XElement(headers[cont], s); //.Append("<" + headers[cont] + ">" + s + "<" + headers[cont] + "/>"); 
             dato.Add(datos); 
            }          
            } 
           cont++;         
          } 
          if (headers.Count == 4 && datos != null) 
           responseXml.Add(dato); 

         } // fin de while 
        } 

       } // Check if no file i sent or not info on file 

      } 
      catch (Exception ex) { 
       //oError = ex.Message; 
      } 
      return responseXml.ToString(); 
     } 

что я хотел бы acomplish с помощью этого кода, чтобы получить XML как этот

<xml version="1.0"> 
<root> 
<AccountInfos> 
<Info> 
<AccountIDToMove>312456</AccountIDToMove> 
<AccountNameToMove>Burger Count</AccountNameToMove> 
<NewParentAccountID>453124</NewParentAccountID> 
<NewParentAccountName> Testcom sales 1</NewParentAccountName> 
</Info> 
<Info> 
<AccountIDToMove>874145</AccountIDToMove> 
<AccountNameToMove>Mac Count</AccountNameToMove> 
<NewParentAccountID>984145</NewParentAccountID> 
<NewParentAccountName> Testcom sales 1</NewParentAccountName> 
</Info> 
</AccountInfos> 
</root> 

за любой ответ или помощь спасибо большое

+2

Не могли бы вы объяснить, что вы подразумеваете под «динамическим xml»? –

+0

походит на любой нормальный файл csv, разделенный запятыми динамическим, я имею в виду, что создаю его в основном в зависимости от того, что я прочитал из файла csv. –

+0

Это исключение «Эта операция создаст неправильно структурированный документ», который вызван, потому что, конечно, я создаю неправильная структура с использованием вышеприведенного кода, поскольку вы указали, что dbc создает более одного корневого элемента. –

ответ

0

Вы добавляете несколько корней в свой документ. Вы сначала добавьте здесь:

   responseXml.Add(new XElement("root")); 

А потом добавить еще корневые элементы в цикле здесь:

      responseXml.Add(dato); 

Однако each XML document must have exactly one single root element. Таким образом, вы, вероятно, захотите сделать:

      responseXml.Root.Add(dato); 
+0

Спасибо за ваш ответ. Я попробую это (Y) –