C# 将XML值添加到dropdownlist,c

C# 将XML值添加到dropdownlist,c,c#,asp.net,xml,drop-down-menu,C#,Asp.net,Xml,Drop Down Menu,我一直在处理以下代码,将xml文件中的每个节点添加到下拉列表中,但到目前为止结果不正确 XmlDocument XmlDoc = new XmlDocument(); XmlDoc.Load(Server.MapPath("~/Upload/" + FileUpload1.FileName)); XmlNodeList question = XmlDoc.GetElementsByTagName("row"); foreach(XmlNode Node in question) {

我一直在处理以下代码,将xml文件中的每个节点添加到下拉列表中,但到目前为止结果不正确

 XmlDocument XmlDoc = new XmlDocument();
 XmlDoc.Load(Server.MapPath("~/Upload/" + FileUpload1.FileName));

 XmlNodeList question = XmlDoc.GetElementsByTagName("row");

 foreach(XmlNode Node in question)
 {
      string answer = Node["var"].Attributes["name"].InnerText;
      string ques = Node["var"].InnerText;

      DropDownList1.Items.Add(new ListItem(answer, ques));
 }
这是我的xml文件

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<root>
  <row>
    <var name="Name" value="Garcia" />
    <var name=" Surname" value=" Jose" />
    <var name=" Country" value=" Cuba" />
    <var name=" Job" value="Software Developer" />
    <var name=" Cabin" value="345A" />
    </row>
    <row>
    <var name="Name" value="Lenon" />
    <var name=" Surname" value="Tim" />
    <var name=" Country" value="USA" />
    <var name=" Job" value="SoftwareDeveloper" />
    <var name=" Cabin" value="444" />
    </row>
    <row>
    <var name="Name" value="Rusell" />
    <var name=" Surname" value=" Anthony" />
    <var name=" Country" value=" UK" />
    <var name=" Job" value="Web Designer" />
    <var name=" Cabin" value="345" />
  </row>
  <row>
    <var name="Name" value="Wolf" />
    <var name=" Surname" value=" Werner" />
    <var name=" Country" value=" Germany" />
    <var name=" Job" value="Linux IT" />
    <var name=" Cabin" value="234 " />
  </row>
</root>
我需要做的只是用值Name、姓氏、Country、Job和cab填充一个下拉列表,这样用户就可以选择这些值来处理数据。我意识到,使用应答标签,我正在访问这些值,我也在尝试与我看到的代码不同的东西

我从这段代码的下拉列表中得到的结果是 名称 名称 名称 名称 我正在添加每个节点的第一个属性,但我需要做的是只添加一个节点的每个值。注意:我将使用的xml文件将具有不同的值和名称等,因此硬编码不是一个选项


如果有人能帮忙,我将不胜感激。

这是你应该用来完成的事情。有一个很好的例子说明了如何在ASP.NET中执行此操作,它也适用于WinForms。关键功能是:

//populates the dropdownlist from xml file
public void PopulateDDLsFromXMLFile()
{
    DataSet ds = new DataSet();
    ds.ReadXml(MapPath("~/Resources/XMLFile.xml"));

    //now define datatext field and datavalue field of dropdownlist
    ddlName.DataTextField = "Name";
    ddlName.DataValueField = "Name";
    ...

    //now bind the dropdownlist to the dataview
    ddlName.DataSource = ds;
    ddlName.DataBind();
}

有关数据绑定的更多信息,请阅读以下内容:,。

您是说要在ddl中显示Garcia、Lenon、Rusell和Wolf吗?如果是,只需更改您的:

Node["var"].Attributes["name"].InnerText;


我不太清楚您正在使用下拉列表做什么,但您可以使用以下代码来获得所需的各个值:

    XmlDocument XmlDoc = new XmlDocument();
    XmlDoc.Load(Server.MapPath("~/Upload/" + FileUpload1.FileName));

    string searchpath = "//root//row";
    XmlNodeList xmlnodes = XmlDoc.SelectNodes(searchpath);

    foreach (XmlNode node in xmlnodes)
    {
         string name = node.SelectSingleNode("//var[@name='Name']").Attributes["value"].InnerXml;
         string surname = node.SelectSingleNode("//var[@name=' Surname']").Attributes["value"].InnerXml;
         string Country = node.SelectSingleNode("//var[@name=' Country']").Attributes["value"].InnerXml;
         string Job = node.SelectSingleNode("//var[@name=' Job']").Attributes["value"].InnerXml;
         string Cabin = node.SelectSingleNode("//var[@name=' Cabin']").Attributes["value"].InnerXml;
    }

我不会使用数据集来做这件事。@Tocco-如果是这样,你应该提供一个替代解决方案。不,我想添加名称、姓氏等。发生的事情是我只从每个节点提取名称,即4 timestring answer=node[var]。Attributes[value]。value;字符串ques=Node[var].InnerText;DropDownList1.Items.Addnew ListItemanswer,ques;XmlNode CurNode=Node[var];CurNode.NextSibling时!=null{DropDownList1.Items.Addnew ListItemCurNode.NextSibling.Attributes[value].value,CurNode.NextSibling.InnerText;CurNode=CurNode.NextSibling;}我不知道如何使它看起来更好。基本思想是,您需要将节点移动到nextsibling并获取值。但是我认为XML格式不好。如果你能改变它。代码会更好。为什么要使用FileUpload1.FileName定义文件源?文件中的节点[var].InnerText在哪里?如何处理“value”属性的值?狼,沃纳,德国。。。
XDocument xml = XDocument.Load(Server.MapPath("~/Upload/" + FileUpload1.FileName));

foreach (var el in xml.Document.Descendants().First().Descendants().First().Descendants())
{
    DropDownList1.Items.Add(new ListItem(el.Attribute(XName.Get("name")).Value, Value = el.Value));
}
    XmlDocument XmlDoc = new XmlDocument();
    XmlDoc.Load(Server.MapPath("~/Upload/" + FileUpload1.FileName));

    string searchpath = "//root//row";
    XmlNodeList xmlnodes = XmlDoc.SelectNodes(searchpath);

    foreach (XmlNode node in xmlnodes)
    {
         string name = node.SelectSingleNode("//var[@name='Name']").Attributes["value"].InnerXml;
         string surname = node.SelectSingleNode("//var[@name=' Surname']").Attributes["value"].InnerXml;
         string Country = node.SelectSingleNode("//var[@name=' Country']").Attributes["value"].InnerXml;
         string Job = node.SelectSingleNode("//var[@name=' Job']").Attributes["value"].InnerXml;
         string Cabin = node.SelectSingleNode("//var[@name=' Cabin']").Attributes["value"].InnerXml;
    }