2012-06-04 49 views
-1

我正在製作Country,state下拉列表。使用Linq到Xml的空引用

用於例如:對於特定的國家,我會讀該國的國家從下面XML文件是我的代碼

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string st = (DropDownList1.SelectedIndex).ToString(); 

     XDocument main = XDocument.Load((Server.MapPath(@"XMLFile1.xml"))); 


    var query = from user in main.Descendants("country") 
      where st == user.Element("state").Value --//i am getting an error here like object 
      select user;        reference not set to an instance object 

    DropDownList2.DataSource = query; 
    DropDownList2.DataBind(); 

    } 

OP的XML(鏈接在Chuck的意見提供):bind dropdownlist using XML

回答

0

您需要發佈您的XML,但目前的問題是,用戶沒有孩子.Element("state"),因此您試圖爲該用戶參考null.Value

這個XML庫可以幫你:https://github.com/ChuckSavage/XmlLib/

用下面的代碼,你可以得到你需要的項目。

string country = "Sri Lanka"; 
XElement root = XElement.Load(Server.MapPath(@"XMLFile1.xml")); 
XElement xcountry = root.XPathElement("//country[.={0}]", country); 

或者

XElement xcountry = root.Descendants("country") 
      .FirstOrDefault(user => user.Value == country); 

然後

XElement state = (XElement)xcountry.NextNode; 
string[] states = state.Elements("text").Select(xtext => xtext.Value).ToArray(); 

,那麼你可能綁定狀態作爲數據源。

+0

怎麼能我在這裏輸入我的xml? – user1435482

+0

添加到您的文章,點擊您帖子底部的灰色'編輯'鏈接。 –

+0

我無法添加它顯示一些錯誤的XML文件,你可以檢查我的XML一樣在這個鏈接http://stackoverflow.com/questions/10224655/bind-dropdownlist-using-xml – user1435482

0

作爲一個經驗法則,你最好使用「的SelectMany」的解決方案,以避免檢查節點的存在

var query = from user in main.Descendants("country") 
      from state in user.Elements("state") 
      where state.Value == st 
      select user;   

users.Elements(「國家」)將是空的(不是null)如果節點不存在,因此用戶節點將不包含在where子句

100%純中的LINQ,工作沒有默認值

編輯:以從XML形狀的新信息在Chuck的答覆意見,請求應該可能是

var query = from user in main.Descendants("country") 
      from state in user.Elements("state") 
      from text in state.Elements("text") 
      where text.Value == st 
      select user;   

編輯2:我的壞,在沒有完全分層的XML ...

+0

RUP我試過你的代碼,但我無法得到相應的狀態在下拉 – user1435482

+0

那是因爲你XML不像我想象的那麼分層 –

2

如果您在使用XML文件命名空間那麼下面可能會幫助您:

XNamespace ns = "url";// the url is the namespace path for your namespace 
var query = from user in main.Descendants("country") 
      from state in user.Elements("state") 
      where state.Value == "st" 
      select user;