-3

いくつかのパラメーターを使用して、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();
4

2 に答える 2