2

xml ファイルを読み込んでリストとして読み込み、フォームの読み込み中に値を探したいと考えています。ファイルを読み取ってリストとして取得するにはどうすればよいですか??? XML ファイル:

<?xml version="1.0" encoding="utf-8"?>
<Types>
<Type>t1-p2</Type>
<Type>t1-k1</Type>
<Type>t2-s2</Type>
</Types>

クラスファイル:

class Testtypes
    {
        public string Type;

        public static List<Testtypes> getTypes()
        {
            XDocument doc = XDocument.Parse("test.xml");
            var q = doc.Descendants("Type").ToList();
            return getTypes.();
        }
    }
4

5 に答える 5

4

まず、パブリック フィールドはありません。少なくともプロパティを使用してください。また、クラスの名前をもう少し意味のある名前に変更します。ただし、コードを次のように変更できます。

class Testtypes
{
    public string Type { get; private set; }

    public static List<Testtypes> FromXml(string filename)
    {
        return XDocument.Load(filename)
                        .Root.Elements("Type")
                        .Select(x => new Testtypes { Type = x.Value })
                        .ToList();
    }
}

または、文字列しかない場合は、独自の型を作成することを避けることができます。

public static List<string> FromXml(string filename)
{
    return XDocument.Load(filename)
                    .Root.Elements("Type")
                    .Select(x => x.Value)
                    .ToList();
}
于 2012-11-09T13:54:21.287 に答える
3

解析メソッドは、ファイルを読み取るために最初に必要な場所で準備完了文字列を受け取ります。Load メソッドを使用してファイルを読み取ると、次のように Descendants メソッドを使用できるようになります。

public static IEnumerable<string> GetTypes()
{
    XDocument doc = XDocument.Load("../../test.xml");
    var xmlElementList = doc.Descendants("Type");
    var stringList = xmlElementList.Select(element => element.Value);

    return stringList;
}

幸運を

于 2012-11-09T14:06:09.950 に答える
1

私のxmlがとても単純なら、私はこれをします

var myList=XElement.Load("data.xml")
                   .DescendantNodes()
                   .Where(N => N.NodeType == XmlNodeType.Text);
于 2012-11-09T15:48:00.387 に答える
1
            private static List<TestType> testType;

            public static List<TestType> TestTypes
            {
                get
                {
                    if (testType== null)
                    {
                        var fileName = GetFilePath("TestTypes.xml");

                        testType= DeseriaizeXml<List<TestType>>(fileName);
                    }

                    return testType;
                }
            }



  private static T DeseriaizeXml<T>(String fileName) where T : class
            {
                using (var stream = File.OpenRead(fileName))
                {
                    return DeseriaizeXml<T>(stream);
                }
            }

            private static T DeseriaizeXml<T>(Stream stream) where T : class
            {
                using (
                    var xmlReader = XmlDictionaryReader.CreateTextReader(stream, Encoding.UTF8,
                                                                         new XmlDictionaryReaderQuotas(), null))
                {
                    var xmlSer = new XmlSerializer(typeof (T));

                    return xmlSer.Deserialize(xmlReader) as T;
                }
            }

     private static String GetFilePath(String fileName)
        {
            var asmUri = new Uri(Assembly.GetExecutingAssembly().CodeBase);

            if (asmUri.IsFile)
            {
                var asmFolder = Directory.GetParent(asmUri.LocalPath);

                return Path.Combine(asmFolder.FullName, fileName);
            }

            throw new Exception();
        }
于 2012-11-09T14:02:26.987 に答える
1

メソッドを使用してファイルをロードし、値ごとLoad()に新しいファイルを作成する必要があります。Testtype各 Type はルート ノードの子であるため、 のElements()代わりに が必要ですDescendants()

class Testtypes
{
    public string Type;

    public static List<Testtypes> getTypes()
    {
        var doc = XDocument.Load("test.xml");
        return doc.Root.Elements("Type")
                   .Select(x => new Testtypes
                   {
                       Type = x.Value
                   }
                   .ToList();
    }
}
于 2012-11-09T15:11:38.963 に答える