使用LINQ选择多个XML节点属性..为什么第一个属性后的所有内容都为null?

时间:2011-03-28 13:59:46

标签: c# linq-to-xml

我有以下示例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”属性,它可以正常工作。其他两个总是为null,因此尝试读取Value属性会抛出NullReferenceException。

从元素中获取我需要的所有三个属性的正确方法是什么?我认为我在正确的轨道上,但遗漏了查询的内容(在我看来,el不是整个元素)

编辑:没关系,我是个白痴。我在看一个元素并查询另一个元素!

1 个答案:

答案 0 :(得分:0)

在您的示例文档中,唯一的table元素有两个名为displayNamedbName的属性,我没有看到任何dbColumntype属性table元素。如果您想访问field元素,请使用root.Descendants("field")代替root.Element("table")