-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

您需要发布您的 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 回答
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,无需默认值即可工作

编辑:在 Chuck 的回答评论中从 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 回答