2013-09-26 20 views
2

У меня есть это XML, что я читаю из URL, который, когда я ViewSource выглядит следующим образом:XML Корневой элемент отсутствует

<xml> 
    <root> 
     <item> 
      <id>1</id> 
      <name>Testing</name> 
     </item> 
     <item> 
      <id>2</id> 
      <name>Testing2</name> 
     </item> 
    </root> 
</xml> 

, когда я побежал код ниже его держать говоря Корневой элемент отсутствует? У меня есть корневой элемент.

public void myfunction() 
{ 
    WebRequest request = WebRequest.Create("http://www.site.com/file.xml"); 
    WebResponse response = request.GetResponse(); 
    Stream dataStream = response.GetResponseStream(); 

    string[] arr = XDocument.Load(dataStream).Root.Descendants("Name").Elements().Select(element => element.Value).ToArray(); //error says root element missing 
    foreach (var item in arr) 
    { 
     MessageBox.Show(item.ToString()); 
    } 
} 
+1

Может потребоваться правильный doctype в теге xml –

+0

, так как я не могу контролировать файл xml, это что-то, что я могу исправить в своем коде? – NULL

+0

Я не использовал 'XDocument', но' XmlDocument.Load' не возвращает фактический документ ... может это что-то с этим делать? – freefaller

ответ

0

В вашем XML-файле нет элемента Name. Xml чувствителен к регистру. Вы должны использовать строчные name:

string[] arr = XDocument.Load(dataStream).Root 
         .Descendants("name") 
         .Select(name => (string)name) 
         .ToArray(); 

BTW ваши name элементы не имеют вложенные элементы.

ОБНОВЛЕНИЕ: Если вы хотите получить значения name элементов, то просто отбросьте эти элементы до string. Здесь вы также можете использовать Select(name => name.Value). Просто не пытайтесь получить вложенные элементы из name - у них их нет.

+0

Спасибо, что вы правы – NULL

+0

Правильно, но это не приведет к тому, что 'root не будет отсутствовать' – EZI

+0

@QtX согласен, но при условии, что xml не может привести к отсутствию' root-элемента '- корневой элемент есть –

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