2011-03-28 40 views
0

我有下面的示例XML:用LINQ選擇多個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不是整個元素)

編輯:沒關係,我是個白癡。我正在查看一個元素並查詢其他元素!

回答

0

在示例文檔的唯一table元素有兩個屬性命名displayNamedbName,我沒有看到table元素上的任何dbColumntype屬性。如果您想訪問field元素,請使用root.Descendants("field")而不是root.Element("table")

相關問題