-1

国、州のドロップダウンリストを作成しています。

例: 特定の国については、以下の 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のコメントにリンクが記載されています):XMLを使用してドロップダウンリストをバインドします

4

3 に答える 3

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; 
于 2012-11-27T19:12:55.547 に答える
0

経験則として、「SelectMany」ソリューションを使用して、ノードの存在をチェックしないようにすることをお勧めします

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

users.Elements("state") は、ノードが存在しない場合は空 (null ではない) になるため、ユーザー ノードは where 句に含まれません。

100% 純粋な Linq、デフォルト値なしで動作

編集:チャックの回答コメントのxml形状から新しい情報を取得すると、リクエストはおそらく

 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 は完全に階層化されていません...

于 2012-06-04T16:14:12.120 に答える
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();

次に、おそらく状態をデータ ソースとしてバインドします。

于 2012-06-04T15:57:15.723 に答える