我的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();
我无法想出接下来的步骤。我该怎么做呢?
答案 0 :(得分:1)
以下是使用LINQ to XML
的解决方案。这个想法在以下步骤中提出:
Product Dropdown
。Product Dropdown
后,获取新值并将相应数据填充到其余下拉列表中。这是代码。我使用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)