当前位置: 首页 > 编程语言 > C#

在C#中用XML填充下拉列表

时间:2023-04-10 18:03:41 C#

在C#中用XML填充下拉列表我有以下xml格式,我使用的是.NET2.0。00PrimaryParent01GroupParent02DeveloperLibrary03CContentLibrary现在我想从上面的XML填充我的下拉菜单,我的下拉菜单TEXT将是“名称”节点值,下拉菜单VALUE将使用C#中的方法“tcmid”属性值。请建议!!您可以使用LinqXDocumentxDoc=XDocument.Load(@"Yourxmlfile.xml");varquery=fromxEleinxDoc.Descendants("publication")选择新的ListItem(xEle.Element("name").Value,xEle.Attribute("tcmid").Value);ddlList.DataValueField="值";ddlList.DataTextField="文本";ddlList.DataSource=查询;ddlList.DataBind();更新:使用XmlDocumentXmlDocumentxDocument=newXmlDocument();xDocument.Load(@"YourXmlFile.xmll");foreach(xDocument.GetElementsByTagName("publication")中的XmlNode节点){ddlList.Items.Add(newListItem(node.SelectSingleNode("name").InnerText,node.Attributes["tcmid"].Value));}ddlList.DataValueField="值";ddlList.DataTextField="文本";ddlList.DataBind();您可以使用Linq-to-XML从xml树中获取所需的值集合并将其绑定到下拉列表。请参阅此链接:http://msdn.microsoft.com/en-us/library/bb387061.aspx您可以尝试使用代码,我更喜欢Xpath,因为它更易于阅读。DocumentLoader类从字符串或任何具有有效xml内容的流中加载内容。公共类DocumentLoader{私有只读字符串内容;publicDocumentLoader(Streamstream):this(newStreamReader(stream).ReadToEnd()){}publicDocumentLoader(stringcontent){this.content=content;}publicKeyValuePair[]GetNames(){List>names=newList>();XmlDocument文档=newXmlDocument();文档.LoadXml(this.content);XmlNodeListxmlNodeList=document.SelectNodes("//publication");if(xmlNodeList!=null){foreach(xmlNodeList中的XmlNode节点){stringkey=node.InnerText;字符串值="";如果(node.Attributes!=null){value=node.Attributes["tcmid"].Value;}names.Add(newKeyValuePair(key,value));}}返回名称.ToArray();}}只是一个测试代码。公共类DocumentLoaderTest{publicvoidTest(){DocumentLoaderloader=newDocumentLoader(File.Open("D:\sampleSource.xml",FileMode.Open));//现在names包含了name元素的值List>names=loader.GetNames();更新以获取Name元素和tcmid属性我创建了自定义类以将XML绑定到DROPDOWN。自定义类的代码如下XmlTextReader阅读器=null;ArrayListlstItems=newArrayList();stringval=String.Empty;字符串txt=String.Empty;boolinTarget=false;尝试{reader=newXmlTextReader(xmlPath);//允许对象到对象比较而不是字符串比较objecttarget=reader.NameTable.Add(elementName);objecttargetVal=reader.NameTable.Add(nodeNameValue);objecttargetTxt=reader.NameTable.Add(nodeNameText);//读取XML流并找到合适的标记while(reader.Read()){if(reader.NodeType==XmlNodeType.Element){//检查属性名称if(reader.Name.Equals(target)){inTarget=真;//获取属性值(如果有的话)if(reader.HasAttributes){if(reader.MoveToAttribute(nodeNameValue)){val=reader.Value;读者.MoveToElement();}if(reader.MoveToAttribute(nodeNameText)){txt=reader.Value;读者.MoveToElement();}}if(val==""||txt=="")val=txt=String.Empty;if(val!=String.Empty&&txt!=String.Empty){ListItemitem=newListItem(txt,val);lstItems.Add(项目);//属性值覆盖任何子节点值//所以如果我们匹配属性然后不查看任何//子节点inTarget=false;val=txt=String.Empty;}}elseif(inTarget){//检查匹配的子节点if(reader.Name.Equals(targetVal)){val=reader.ReadString();如果(val=="")val=String.Empty;}if(reader.Name.Equals(targetTxt)){txt=reader.ReadString();如果(txt=="")txt=String.Empty;}if(val!=String.Empty&&txt!=String.Empty){ListItemitem=newListItem(txt,val);lstItems.Add(项目);val=txt=String.Empty;}}}if(reader.NodeType==XmlNodeType.EndElement||reader.IsEmptyElement){if(reader.Name.Equals(target)){inTarget=false;}}}if(lstItems.Count>0){foreach(lstItems中的ListItem项目){dd.Items.Add(item);}}else{ListItemitem=newListItem("无可用数据","");dd.Items.Add(项目);}lstItems.Clear();}catch(Exceptionexp){context.Response.Write(exp.Message);}finally{if(reader!=null)reader.Close();创建类后,您可以像下面提到的那样调用类函数“BindDropDown”希望对你有帮助。也许这对你有用:path=Path.Combine(HostingEnvironment.ApplicationPhysicalPath,@"App_DataEmpresas.xml");ds=新数据集();ds.ReadXml(路径);ddlEmpresa.DataValueField="值";ddlEmpresa.DataTextField="姓名";ddlEmpresa.DataSource=ds;ddlEmpresa.DataBind();而XML就是:以上就是C#学习教程:C#中用XML填充下拉列表的所有内容分享,如果对大家有用还需要了解更多关于C#学习教程,希望大家多多关注—Elemento11本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: