Linq для XML в C # - PullRequest
       4

Linq для XML в C #

0 голосов
/ 30 ноября 2011

Сценарий:

  1. Вид сетки заполняется в окне WPF.
  2. Имеет статический список в коде позади (который я хочу получить из файла XML).

Попытка переместить статический список в файл xml. Для этого я создал файл ml в следующем формате

<customers>
<customer Name="abc"/>
<customer Name="def"/>
</customers>

CodeBehind:

Xdocument doc=Xdocument.load("customers.xml");
var customerList = (from e in doc.Descendants("Cusomters")

                            select new
                            {
                                CustomerName = e.Attribute("Name").Value
                            }).ToList();

IЯ не могу получить имена клиентов из XML-файла в customerList. Буду признателен, если кто-нибудь поможет мне двигаться вперед.

Ответы [ 4 ]

3 голосов
/ 30 ноября 2011

"Cusomters" написано неправильно, должно быть "Customers".

Очевидно, это не тот код, который вы используете, так как он даже не компилируется.Это должно быть так:

XDocument doc = XDocument.Load( "customers.xml" );
var customerList = (from e in doc.Descendants( "customer" )
        select new
        {
            CustomerName = e.Attribute( "Name" ).Value
        }).ToList();

Вы действительно должны отметить тот факт, что он не будет компилироваться.Это, или вы скопировали его вручную, что тоже не поможет нам.

Логическая проблема здесь в том, что вы запрашиваете все теги Customers, обратите внимание на s вконец.Вы действительно хотите искать теги Customer, которые имеют атрибут name.Customer*s* просто группа верхнего уровня.

2 голосов
/ 30 ноября 2011

Скорее всего, вам нужен List<string>, поэтому вам не нужно проецировать на анонимный класс - также в вашем запросе есть опечатка ("Cusomters"):

var customerList = (from e in doc.Descendants("Customer")
                    select e.Attribute("Name").Value).ToList();

или с расширениемсинтаксис метода:

var customerList = doc.Descendants("Customer")
                      .Select( e => e.Attribute("Name").Value)
                      .ToList();
2 голосов
/ 30 ноября 2011

Используйте customer вместо Cusomters (XML чувствителен к регистру):

from e in doc.Descendants("customer")
0 голосов
/ 30 ноября 2011

Я всегда использовал:

doc.root.elements("Customer")

для таких маленьких фрагментов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...