Выбор нескольких атрибутов узла XML с помощью LINQ. Почему все после первого атрибута равно нулю? - PullRequest
0 голосов
/ 28 марта 2011

У меня есть следующий образец XML:

<?xml version="1.0" encoding="utf-8" ?>
<queryableData>
  <table displayName="Shipments" dbName="Quotes">
    <foreignKey column="CustomerId" references="CustomerRegistration"/>
    <foreignKey column="QuoteStatusId" references="QuoteStatus"/>
    <fields>
      <field displayName="Quote Charge" dbColumn="QuoteCharge" type="Number"/>
      <field displayName="Total Weight" dbColumn="TotalWeight" type="Number"/>
    </fields>
  </table>
</queryableData>

и я пытаюсь создать анонимный объект с содержимым узла field. Вот мой код LINQ:

XElement root = XElement.Load("queryable.xml");
var elem = from el in root.Elements("table")
select new
{
    DisplayName = el.Attribute("displayName").Value,
    Column = el.Attribute("dbColumn").Value,
    DataType = el.Attribute("type").Value
};

Если я только укажу атрибут «DisplayName», он будет работать нормально. Два других всегда равны нулю, и поэтому попытка прочитать свойство Value вызывает исключение NullReferenceException.

Как правильно получить все три атрибута, которые мне нужны, от элемента? Я думаю, что я на правильном пути, но что-то упустил в запросе (мне кажется, что el не весь элемент)

РЕДАКТИРОВАТЬ: Неважно, я идиот. Я смотрю на один элемент и запрашиваю другой!

1 Ответ

0 голосов
/ 29 марта 2011

В вашем примере документа единственный элемент table имеет два атрибута с именами displayName и dbName, я не вижу никаких атрибутов dbColumn или type в элементе table.Если вы хотите получить доступ к элементам field, используйте root.Descendants("field") вместо root.Element("table").

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