将Xml加载到DropDown中

时间:2015-09-21 12:59:57

标签: c# asp.net xml

我的Xml文件看起来像这样。

<?xml version="1.0" encoding="utf-8" ?>
<Test1>
  <Product Name="Test1" Value="10">
    <Catagory>
      <CatagoryType Value="20">AAA</CatagoryType>
      <CatagoryType Value="22">BBB</CatagoryType>
      <CatagoryType Value="23">CCC</CatagoryType>
      <CatagoryType Value="25">DDD</CatagoryType>
    </Catagory>
    <Type>
      <TypeName Value="11">111</TypeName>
      <TypeName Value="12">222</TypeName>
      <TypeName Value="13">333</TypeName>
      <TypeName Value="14">444</TypeName>
    </Type>
    <Location>
      <Area Value="0">Inside</Area>
      <Area Value="1">OutSide</Area>
      <Area Value="2">NoWhere</Area>
    </Location>
  </Product>
  <Product Name="Test2" Value="10">
    <Catagory>
      <CatagoryType Value="20">EEE</CatagoryType>
      <CatagoryType Value="22">FFF</CatagoryType>
      <CatagoryType Value="23">GGG</CatagoryType>
      <CatagoryType Value="25">HHH</CatagoryType>
    </Catagory>
    <Type>
      <TypeName Value="11">555</TypeName>
      <TypeName Value="12">666</TypeName>
      <TypeName Value="13">777</TypeName>
      <TypeName Value="14">888</TypeName>
    </Type>
    <Location>
      <Area Value="0">Inside</Area>
      <Area Value="1">OutSide</Area>
      <Area Value="2">NoWhere</Area>
    </Location>
  </Product>
</Test1>

我正在努力制作您可以在下拉菜单中选择产品的产品。然后根据产品,在另一个下拉列表中获取一个类别。然后键入另一个,并在最后一个位置。我已经能够通过下拉菜单显示产品。但是无法根据产品获得其他元素。

我的代码将产品加载到下拉列表中:

XmlDataset.ReadXml(Server.MapPath("XmlFile1.xml"));

drpProducts.DataSource = XmlDataset.Tables["Product"];

drpProducts.DataTextField = "Name";
drpProducts.DataValueField = "Value";
drpProducts.DataBind();

我无法想出接下来的步骤。我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

以下是使用LINQ to XML的解决方案。这个想法在以下步骤中提出:

  1. 首先,将所有产品加载到Product Dropdown
  2. 更改Product Dropdown后,获取新值并将相应数据填充到其余下拉列表中。
  3. 这是代码。我使用Windows Application创建了一个演示程序。但它并不重要,只关注我如何选择和填充数据。

    首先,声明:

    private XDocument _document;
    

    首次加载时运行此功能:

    private void LoadData()
    {
        // Load the document
        _document = XDocument.Load("Product.xml");
    
        // Get the root's children, here is the products
        IEnumerable<XElement> products = _document.Root.Elements();
    
        // Get product name
        var productNames = new List<string>();
        foreach (var element in products)
        {
            productNames.Add(element.Attribute("Name").Value);
        }
    
        // Assign to the source
        ddlProduct.DataSource = productNames;
    }
    

    更改产品名称时,请加载相应的类别。

    private void ddlProduct_SelectedIndexChanged(object sender, EventArgs e)
    {
        // New value
        string productName = ddlProduct.Text;
    
        // Ignore empty value, or your XPath would be wrong
        if (String.IsNullOrEmpty(productName))
        {
            return;
        }
    
        // Build the XPath
        string xPath = string.Format("//Product[@Name='{0}']", productName);
    
        // Select product with that name
        XElement product = _document.XPathSelectElement(xPath);
    
        // Select the CategoryType
        IEnumerable<XElement> categories = product.Descendants("CatagoryType");
    
        // Get the name
        var categoryNames = new List<string>();
        foreach (var category in categories)
        {
            categoryNames.Add(category.Value);
        }
    
        // Assign to source
        ddlCategory.DataSource = categoryNames;
    }
    

    为了简化答案,我只填充Category。其他都是一样的。

    如果您想了解有关XPath语法的更多信息,请查看此link。有关LINQ to XML的详细信息,请查看此tutorial

答案 1 :(得分:0)

你可以这样试试: -

XmlDocument xdoc=new XmlDocument();
xdoc.Load("XmlFile1.xml");

//XmlNodeList node = xdoc.SelectSingleNodes("/Test1/Product/");

var node = document.SelectNodes("/Test1/Product");

foreach(XmlNode n in node )
{
ListItem l = new ListItem();
    l.Text = n.InnerXml.ToString();
    drpWerk.Items.Add(l);
}
drpProducts.DataBind();

答案 2 :(得分:0)

XML在导入DataSet时包含7个表 enter image description here

此处显示表中的列名称 enter image description here

值在TypeName表中。我使用VS中的Watch项来查看DataSet对象。