2013-09-07 2 views
1

У меня есть XML-файл, который содержит несколько сообщений в одном большом файле, поэтому я хочу разбить файл на отдельный файл xml для каждого сообщения, у меня есть код aC#, который только дает мне первый экземпляр сообщение. Пожалуйста, вы можете сказать, что я здесь отсутствует:Сплит XML-файл в C#

Вот мой код:

 string strSeq; 
     string strFileName; 
     XDocument doc = XDocument.Load(@"C:\XMl\MR.xml"); 
     var newDocs = doc.Descendants("Message") 
       .Select(d => new XDocument(new XElement("FileDump", d))); 
      foreach (var newDoc in newDocs) 
       { 
       strSeq = XDocument.Load(@"C:\XMl\MR.xml").XPathSelectElement 
       "//FileDump/Message/MsgID").Value;   

       strFileName = "MR_" + strSeq + ".xml"; 
       newDoc.Save(Console.Out); Console.WriteLine(); 
       newDoc.Save(@"C:\xml\MR\Tst\" + strFileName); 
       Console.WriteLine(); 
       } 

ответ

1

Вы должны искать идентификатор сообщения в newDoc вместо doc:

foreach (var newDoc in newDocs) 
{ 
    strSeq = newDoc.XPathSelectElement("//FileDump/Message/MsgID").Value;   

    strFileName = "MR_" + strSeq + ".xml"; 
    newDoc.Save(Console.Out); Console.WriteLine(); 
    newDoc.Save(@"C:\xml\MR\Tst\" + strFileName); 
    Console.WriteLine(); 
} 
+0

Marcins: когда я изменил строку, чтобы найти сообщение в рамках newdoc, я получаю следующее error: Невозможно преобразовать группу методов «XPathSelectElement» в тип «string» без делегата. Это ошибка, которую я получаю, когда я изменил код на ваш –

+0

@MoeR '(' отсутствует. Попробуйте сейчас. – MarcinJuraszek

+0

oops sorry lol. Он работает как приятель шарма –

0

Try,

string path = @"C:\xml\MR\Tst\MR_"; 

XElement root = XElement.Load(file); 
foreach(XElement message in root.Descendants("Message")) 
{ 
    string id = message.Element("MsgID").Value; 
    message.Save(path + id + ".xml"); 
} 
Смежные вопросы