【发布时间】:2018-05-19 10:49:56
【问题描述】:
我有一个看起来像这样的 xml 文件;
<?xml version="1.0" encoding="utf-8" ?>
<Data>
<Family>
<ID>1</ID>
<Head_Model>FOV</Head_Model>
<Version>7</Version>
<Version>15</Version>
<Version>40</Version>
<Version>80</Version>
<Use>U</Use>
<Use>M</Use>
</Family>
<Family>
<ID>2</ID>
<Head_Model>CSK</Head_Model>
<Version>20</Version>
<Version>40</Version>
</Family>
<Family>
<ID>3</ID>
<Head_Model>EX</Head_Model>
</Family>
</Data>
在我的表单上,我有 3 个组合框,分别用于型号、版本和用途。
我需要用 xml 中的数据填充组合框,因此如果您选择“FOV”,那么只有该版本应显示在组合框 2 中,并在组合框 3 中显示。
我正在读取这样的 xml 以在加载时填充组合框一个;
public void LoadXML()
{
using (XmlReader reader = XmlReader.Create(XmlLocation))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
if (reader.Name == "ID")
{
reader.Read();
string sID = reader.Value;
string sHead_Model = string.Empty;
if (reader.ReadToFollowing("Head_Model"))
{
reader.Read();
sHead_Model = reader.Value;
}
if (!string.IsNullOrEmpty(sID) && sHead_Model != string.Empty)
lstItems.Add(new Item(sHead_Model, Convert.ToInt32(sID)));
}
}
}
comboBox1.DataSource = lstItems;
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Id";
}
问题是能够过滤和填充框 2 我无法弄清楚如何使用这些值填充它,因为我只显示了第一个 <Value> 标记,并且它不会随 switch 事件而改变。
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
switch (comboBox1.Text)
{
case "FOV":
using (XmlReader reader = XmlReader.Create(XmlLocation))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
if (reader.Name == "ID")
{
reader.Read();
string sID = reader.Value;
string sHead_Model = string.Empty;
if (reader.ReadToFollowing("Head_Model"))
{
reader.Read();
sHead_Model = reader.Value;
string sVersion = string.Empty;
if (reader.ReadToFollowing("Version"))
{
reader.Read();
sVersion = reader.Value;
}
if (!string.IsNullOrEmpty(sID) && sHead_Model != string.Empty && sVersion != string.Empty && sHead_Model == "FOV")
VersionsItems.Add(new Item(sVersion, Convert.ToInt32(sID)));
}
}
}
}
comboBox2.DataSource = VersionsItems;
comboBox2.DisplayMember = "Name";
comboBox2.ValueMember = "Id";
break;
case "CSK":
using (XmlReader reader = XmlReader.Create(XmlLocation))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
if (reader.Name == "ID")
{
reader.Read();
string sID = reader.Value;
string sHead_Model = string.Empty;
if (reader.ReadToFollowing("Head_Model"))
{
reader.Read();
sHead_Model = reader.Value;
string sVersion = string.Empty;
if (reader.ReadToFollowing("Version"))
{
reader.Read();
sVersion = reader.Value;
}
if (!string.IsNullOrEmpty(sID) && sHead_Model != string.Empty && sVersion != string.Empty && sHead_Model == "CSK")
VersionsItems.Add(new Item(sVersion, Convert.ToInt32(sID)));
}
}
}
}
comboBox2.DataSource = VersionsItems;
comboBox2.DisplayMember = "Name";
comboBox2.ValueMember = "Id";
break;
}
}
【问题讨论】:
-
我会将 xml 解析为您想要的数据结构并使用这些数据结构,而不是不断返回 xml。
标签: c# xml visual-studio