【发布时间】:2020-12-16 04:27:17
【问题描述】:
这可能是重复的,但我无法找到解决方案。
我有一个从 xml 文件填充的 ComboBox。当我在 ComboBox 中选择一个项目时,我想用同一个 xml 文件中的“特殊”元素填充一个列表框。
xml:
<ClassID Barbarian="Barbarian">
<Name>Barbarian</Name>
<Alignment>NG CG NN CN NE CE</Alignment>
<Special>Fast Movement</Special>
<Special>Rage Power</Special>
</ClassID>
我可以让列表框填充所有“特殊”元素,但我只想要指定类名(即野蛮人属性)的元素。
使用所有“特殊”元素填充列表框的代码,无论选择了哪个 ComboBox 项:
//Gets Specials from xml
public static List<string> GetSpecialsFromXml(string filename, string tagname)
{
List<string> Specials = new List<string>();
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlNodeList specials = doc.GetElementsByTagName(tagname);
foreach(XmlNode special in specials)
{
Specials.Add(special.InnerText);
}
return Specials;
}
//Loads feats into feat list
public void LoadFeats()
{
List<string> Special = GetSpecialsFromXml(Gamepath, "Special");
FeatBox.Items.AddRange(Special.ToArray());
}
LoadFeats 通过 ComboBox SelectedItemChanged 事件调用。
在处理 xml 文件时,我仍然是个菜鸟。
编辑:TL;DR 解决方案:
将public static List<string> GetSpecialsFromXml(string filename, string tagname) 更改为public List<string> GetSpecialsFromXml(string filename, string tagname)。
添加了string Combo = ComboBox.Text;和string strXPath = $"ClassID[{Combo}='{Combo}']/Special"
替换为XmlNodeList specials = doc.GetElementsByTagName(tagname);
XmlNodeList specials = doc.SelectNodes( strXPath );
【问题讨论】:
-
@AlexanderPetrov 我的错……就像我说的,我还是个菜鸟。我会修正术语。谢谢!