我需要使用一些参数从 xml 文件中获取所有属性。示例 xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<Model Name="modelname">
<Mode Name="mode1">
<ClassType1>class1</ClassType1>
<ClassType2>class2</ClassType2>
<ClassType3>class3</ClassType3>
</Mode>
<Mode Name="mode2">
<ClassType1>class4</ClassType1>
<ClassType2>class5</ClassType2>
<ClassType3>class6</ClassType3>
</Mode>
<Mode Name="mode3">
<ClassType1>class7</ClassType1>
</Mode>
</Model>
我需要知道modeN和ClassTypeN的所有属性。我通过使用代码来做到这一点:
public static HashSet<String> getXMLValues(String configPath,String nameMode,String classElement)
{
XDocument document = XDocument.Load(configPath);
var lmodes = (from modes in document.Root.Descendants("Mode")
select modes.Attribute("Name").Value).ToList();
bool elementExists = false;
bool namemode = false;
HashSet<String> values = new HashSet<string>();
XmlTextReader reader = new XmlTextReader(configPath);
while (reader.Read())
{
switch(reader.NodeType)
{
case XmlNodeType.Element:
if (reader.Name == "Mode")
{
for (int i = 0; i < lmodes.Count; i++)
{
if (nameMode == lmodes[i])
{
namemode = true;
}
}
}
if (namemode)
{
if (reader.Name == classElement)
{
elementExists = true;
}
}
break;
case XmlNodeType.Text:
if (namemode)
{
if (elementExists)
{
values.Add(reader.Value);
elementExists = false;
}
}
break;
}
}
return values;
}
但是我有问题 - 当我运行这个函数时:getXMLValues(ConfigPath,"mode3", "ClassType1");我从 mode1 和 mode2 得到一些额外的元素,它们也有 ClassType1。那么,你能帮我改正这个错误吗?
更新:我尝试编写一些这样的代码:
var elements=(from elems in document.Elements(classElement)
select elems.Attributes("i dont know what parameter i should use").ToList()
);
更新:我的团队帮助我使用这样的代码:
var elem = document.Root.Elements("Mode").
Where(o => o.Attribute("Name") != null && o.Attribute("Name").Value == nameMode);
var rr = elem.Elements(classElement).Select(o => o.Value).ToArray();