C# 基于组合框选定项的特定xml子项
这可能是重复的,但我还没有找到解决方案 我有一个从xml文件填充的组合框。当我在组合框中选择一个项目时,我想用同一个xml文件中的“特殊”元素填充一个列表框 xml:C# 基于组合框选定项的特定xml子项,c#,xml,children,C#,Xml,Children,这可能是重复的,但我还没有找到解决方案 我有一个从xml文件填充的组合框。当我在组合框中选择一个项目时,我想用同一个xml文件中的“特殊”元素填充一个列表框 xml: 野蛮人 NG CG NN CN NE CE 快速移动 愤怒的力量 我可以让列表框填充所有的“特殊”元素,但我只需要指定类名的元素(即Barbarian属性) 使用所有“特殊”元素填充列表框的代码,无论选择了哪个组合框项目: //Gets Specials from xml public static List<strin
野蛮人
NG CG NN CN NE CE
快速移动
愤怒的力量
我可以让列表框填充所有的“特殊”元素,但我只需要指定类名的元素(即Barbarian属性)
使用所有“特殊”元素填充列表框的代码,无论选择了哪个组合框项目:
//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());
}
//从xml获取特殊信息
公共静态列表GetSpecialsFromXml(字符串文件名、字符串标记名)
{
列表特殊项=新列表();
XmlDocument doc=新的XmlDocument();
doc.Load(文件名);
XmlNodeList specials=doc.GetElementsByTagName(标记名);
foreach(XmlNode专用于特价)
{
Specials.Add(special.InnerText);
}
退货特价;
}
//将专长加载到专长列表中
公共void LoadFeats()
{
List Special=GetSpecialsFromXml(游戏路径,“特殊”);
FeatBox.Items.AddRange(Special.ToArray());
}
使用组合框SelectedItemChanged事件调用LoadFeats
在处理xml文件时,我仍然是个笨蛋
编辑:TL;灾难恢复解决方案:
将公共静态列表GetSpecialsFromXml(字符串文件名,字符串标记名)
更改为公共列表GetSpecialsFromXml(字符串文件名,字符串标记名)
添加了stringcombo=ComboBox.Text代码>和字符串strXPath=$“ClassID[{Combo}='{Combo}']/Special”
替换的XmlNodeList specials=doc.GetElementsByTagName(标记名)代码>
使用XmlNodeList specials=doc.SelectNodes(strXPath)代码>在SelectNodes()函数调用中使用XPath,而不是使用doc.GetElemnetByTagName查找“标记名”。XPath对于XML就像SQL对于数据库一样强大
使用类似于“SelectNodes()”调用中的XPath语句
替换XmlNodeList specials=doc.GetElementsByTagName(标记名);用这个
XmlNodeList specials = doc.SelectNodes( strXPath );
然后像已经在做的那样迭代
祝你的项目好运看起来很有希望。但是,我需要将strXpath设置为ComboBox.SelectedItem,对吗?到目前为止,当我尝试使用它时,它给出了一个“对象引用”错误。ClassID似乎使用了一个参数,对吗?如何将参数设置为ComboBox.SelectedItem?特别是如果它给出了一个对象引用错误?谢谢我必须从公共静态列表GetSpecialsFromXml(字符串文件名,字符串标记名)
中删除“static”,现在我可以引用组合框了。现在,为了将该值输入到“strXpath”中,我们可以使用stringcombo=ComboBox.Text
和$“ClassID[{Combo}='{Combo}']/Special”代码>太好了!你明白了。XPath在任何其他情况下都能很好地为您服务。@AlexanderPetrov我的错……正如我所说,我仍然是个笨蛋。我来修正术语。谢谢
string strXPath= "//ClassID[@Barbarian='Barbarian']/Special"
XmlNodeList specials = doc.SelectNodes( strXPath );