Populating dropdown from the XML in C#

后端 未结 5 2144
花落未央
花落未央 2021-01-06 06:00

I have got below xml format with me and I am using .NET 2.0.



  

        
5条回答
  •  没有蜡笔的小新
    2021-01-06 06:26

    I have created my custom class for binding XML to DROPDOWN. code of custom class is following

    public class XmlReaderBinder
        {
            public static void BindDropDown(ComboBox dd, string elementName, string nodeNameValue,
                              string nodeNameText, string xmlPath)
            {
                HttpContext context = HttpContext.Current;
                XmlTextReader reader = null;
                ArrayList lstItems = new ArrayList();
                string val = String.Empty;
                string txt = String.Empty;
                bool inTarget = false;
                try
                {
                    reader = new XmlTextReader(xmlPath);
                    //Allow for object to object comparison rather than string comparison
                    object target = reader.NameTable.Add(elementName);
                    object targetVal = reader.NameTable.Add(nodeNameValue);
                    object targetTxt = reader.NameTable.Add(nodeNameText);
                    //Read through the XML stream and find proper tokens
                    while (reader.Read())
                    {
                        if (reader.NodeType == XmlNodeType.Element)
                        {
                            //Check attribute names
                            if (reader.Name.Equals(target))
                            {
                                inTarget = true;
                                //Get attribute values (if any)
                                if (reader.HasAttributes)
                                {
                                    if (reader.MoveToAttribute(nodeNameValue))
                                    {
                                        val = reader.Value;
                                        reader.MoveToElement();
                                    }
                                    if (reader.MoveToAttribute(nodeNameText))
                                    {
                                        txt = reader.Value;
                                        reader.MoveToElement();
                                    }
                                }
                                if (val == "" || txt == "") val = txt = String.Empty;
                                if (val != String.Empty && txt != String.Empty)
                                {
                                    ListItem item = new ListItem(txt, val);
                                    lstItems.Add(item);
                                    //Attribute values override any child nodes values
                                    //so if we match on attributes then don't look at any 
                                    //child nodes
                                    inTarget = false;
                                    val = txt = String.Empty;
                                }
                            }
                            else if (inTarget)
                            {  //Check for child nodes that match
                                if (reader.Name.Equals(targetVal))
                                {
                                    val = reader.ReadString();
                                    if (val == "") val = String.Empty;
                                }
                                if (reader.Name.Equals(targetTxt))
                                {
                                    txt = reader.ReadString();
                                    if (txt == "") txt = String.Empty;
                                }
                                if (val != String.Empty && txt != String.Empty)
                                {
                                    ListItem item = new ListItem(txt, val);
                                    lstItems.Add(item);
                                    val = txt = String.Empty;
                                }
                            }
                        }
                        if (reader.NodeType == XmlNodeType.EndElement || reader.IsEmptyElement)
                        {
                            if (reader.Name.Equals(target))
                            {
                                inTarget = false;
                            }
                        }
    
                    }
                    if (lstItems.Count > 0)
                    {
                        foreach (ListItem item in lstItems)
                        {
                            dd.Items.Add(item);
                        }
    
                    }
                    else
                    {
                        ListItem item = new ListItem("No Data Available", "");
                        dd.Items.Add(item);
                    }
                    lstItems.Clear();
                }
                catch (Exception exp)
                {
                    context.Response.Write(exp.Message);
                }
                finally
                {
                    if (reader != null) reader.Close();
                }
            }
    
        }
    

    And after creating class you can call class function 'BindDropDown' like below mentioned ways.

    XmlReaderBinder.BindDropDown('DROP DOWN NAME', "publicationsList", "publication", "Name", xmlPath);
    

    Hope it will help for you.

提交回复
热议问题