这是您需要做的。将此添加到您的代码后面。假设您使用的是 c#,但如果不是,您可以轻松地将其转换(只需 google c# 到 vb)。我不会在页面中执行此操作,而是在后面的代码中执行此操作。此外,除非您使用“名称”节点,否则您的示例 xml 没有任何类型的键,顺便说一句,这是一个坏主意。我建议您考虑将 xml 更改为以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<products>
<product id="1">
<name>Golf Shirt</name>
<description>Nike branded</description>
<cost>49.99</cost>
<sizes>S,M,L,XL</sizes>
</product>
<product id="2">
<name>Another Golf Shirt</name>
<description>Ashworth branded</description>
<cost>59.99</cost>
<sizes>S,M,L,XL,XXL</sizes>
</product>
</products>
下面发生的情况是,当控件加载时,它会抓取 xml 文档,然后使用您的密钥(很可能您将在产品页面上,并且它会有一些密钥,如果不使用“名称”节点但再次小心that) 选择单个节点。我们采用尺寸和修剪/替换以确保我们没有多余的空间等等。然后将字符串数组中的每个添加到下拉列表中。
protected void ddlSize_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// get reference to dropdown
var ddl = (DropDownList)sender;
// clear existing items if not it will keep appending.
ddl.Items.Clear();
// add default choose item.
ddl.Items.Add(new ListItem("Choose", ""));
// get the xml document.
var xDoc = new XmlDocument();
var path = Server.MapPath("~/items.xml");
xDoc.Load(path);
// you'll want to get this id from a param from your page or something.
// this is because I'm assuming you'll have several products you'll need to grab
// the product but the "name" node or an attribute as I've added called "id" or something.
var id = 1;
// select the sizes node based on our id as described above.
var node = xDoc.SelectSingleNode("//product[@id='" + id + "']//sizes");
// split to string array but trim and replace any spaces just in case.
string[] sizes = node.InnerText.ToString().Trim().Replace(" ", "").Split(',');
// iterate sizes and add them to the drop down.
foreach (string s in sizes)
{
ddl.Items.Add(new ListItem(s, s));
}
}
}
顺便说一句,这可能看起来很多,但实际上并非如此。你可以调查一些你放在帮助类中的帮助方法/扩展,它们会清理你需要的每个下拉列表等。您也可以根据 xml doc 缓存它的大小等,但这是另一个主题。