2017-01-26 5 views
0

Я хочу получить данные из XML (которые также имеют xsd-файл) с использованием C#. Что это может быть неправильно с моим кодом: Мне нравится этот файл в Xml.Запрос XML Linq в C#

<Model_1 xmlns="http://www.3ds.com/xsd/3DXML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.3ds.com/xsd/3DXML ./3DXML.xsd"> 
    <Header> 
     <item></item> 
     <item1></item1> 
     <item2></item2> 
    </Header> 
    <Product> 
     <otheritem></otheritem> 
     <otheritem1></otheritem1> 
     <otheritem2></otheritem2> 
    </Product> 
    <Books> 
     <otheritem></otheritem> 
     <otheritem1></otheritem1> 
     <otheritem2></otheritem2> 
    </Books> 
</Model_1> 

... C#

 XDocument xdoc = Document.Load("document.xml")               var items = from item in xdoc.Descendants("Header") 
          select new 
          { 
           _Item= item.Element("Item").Value, 
           _Item1= item.Element("Item1").Value, 
           _Item2= item.Element("Item2").Value,   
          }; 

       foreach (var item in items) 
       { 
        Item= item._Item; 
        Item1 = item._Item1; 
        Item2 = item.Item2; 
       } 
Console.WriteLine("show me :" + Item+ " + " + Item1 + " + " + Item2); 

Как я могу извлечь только элементы из заголовка и не продукта или книги?

ответ

0

Вы должны использовать пространство имен:

var ns = xdoc.Root.GetDefaultNamespace(); 
var header = xdoc.Root.Element(ns + "Header"); 

Также имейте в виду - у вас есть нижний регистр item в вашем XML, а не Item:

Item = (string)header?.Element(ns + "item"); 
Item1 = (string)header?.Element(ns + "item1"); 
Item2 = (string)header?.Element(ns + "item2"); 
+0

Thnx, я пытался, но все-таки тот же результат , – maki

+0

@maki скопировал ваш xml и успешно проанализировал его. Убедитесь, что вы используете один и тот же xml, как вы указали в вопросе –

+1

большое спасибо. это работает сейчас, это была моя ошибка. – maki