2013-10-24 4 views
0

У меня есть XML-данные, как этотРазбор данных XML в C#

string data = @"<DeliveryReport><message id=""093102403501103726"" 
    sentdate=""2013/10/24 08:50:11"" donedate=""2013/10/24 08:50:12"" 
    status=""NOT_DELIVERED"" gsmerror=""1"" /></DeliveryReport>"; 

и уверен, преобразование/разбор его как

if (data != null) 
{ 
    XDocument xmlDoc = XDocument.Load(data); 

    var tutorials = from tutorial in xmlDoc.Descendants("message") 
     select new 
     { 

     }; 
} 

это бросает ошибка недопустимые символы в пути. может ли любое тело сказать мне, что я m misisng?

+0

@SteveB: Это не дубликат, что - один использовал 'XmlTextReader' конструктор, это использует' XDocument. Load'. Конечно, это та же идея: «вы предоставили текст методу, принимающему имя файла/URI», но лучшее решение несколько отличается. –

+0

@SteveB: Правильно - это определенно дубликат. Хотя я предпочитаю свой ответ здесь;) –

ответ

3

Вы используете XDocument.Load(string), который принимает имя файла или URL, чтобы загрузить XML из:

Параметры
URI: Строка URI, который ссылается на файл, чтобы загрузить в новый XDocument ,

Вы хотите XDocument.Parse(string), который принимает XML уже в строке:

Параметры
текст: Строка, содержащая XML.

+0

В чем разница между этим и LoadXML? – Jerry

+1

@Jerry: LoadXML находится в XmlDocument, а не в XDocument. –

+0

Спасибо, я этого не заметил. Раньше я не использовал XDocument. Это лучше, чем XmlDocument? – Jerry

0

Попробуйте использовать TextReader перегрузку Load при создании XDocument:

if (data != null) 
{ 
    XDocument xmlDoc = XDocument.Load(new System.IO.StringReader(data)); 

    var tutorials = from tutorial in xmlDoc.Descendants("message") 
        select new 
        { 

        }; 

} 
+1

Зачем беспокоиться об этом, когда XDocument.Parse обрабатывает его уже? –

+0

@JonSkeet На самом деле я не знал об этом. Я всегда использую перегрузку TextReader для своих XDocuments, главным образом потому, что они либо a) из файла, либо b) ответы stackoverflow, которые первоначально использовали поток. – Gusdor

+0

Если они из потока, я бы использовал 'XDocument.Load (Stream)', который позволяет парсеру автоматически определять кодировку - безопаснее, чем делать это дважды ... –