いくつかのパラメーターを使用して、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"); ClassType1も持つmode1とmode2からいくつかの追加要素を取得します。では、この間違いを修正するのを手伝ってもらえますか?
更新:次のようなコードを記述しようとしています:
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();