Uncategorized

XML yield return

Aşağıdaki xml dosyasını deserialize ediyoruz ve metod ile listeden döneceğiz.

<master>
    <a>
        <ab>ab1</ab>
    </a>
    <b>
        <ba>
            <baa>bab1</baa>
            <bab>bab2</bab>
            <bac>bab3</bac>
        </ba>
        <bb>bb2</bb>
    </b>
</master>
class Program
    {
        static void Main(string[] args)
        {
            string veriler = File.ReadAllText("data.xml");
            foreach (string veri in XmlAra(veriler))
            {
                Console.WriteLine(veri);
            }
            
            Console.Read();
        }

        static IEnumerable<string> XmlAra(string veriler)
        {
            Serializer serial = new Serializer();
            dynamic nodes = serial.Deserialize<dynamic>(veriler);
            foreach (var node in nodes)
            {
                XmlElement xe = (XmlElement)node.FirstChild;
                if (xe.HasChildNodes)
                    yield return xe.FirstChild.InnerText;
                else
                    yield return xe.InnerText;
            }
        }
    }

    public class Serializer
    {
        public T Deserialize<T>(string input) where T : class
        {
            XmlSerializer ser = new XmlSerializer(typeof(T), new XmlRootAttribute("master"));

            using (StringReader sr = new StringReader(input))
            {
                return (T)ser.Deserialize(sr);
            }
        }

        public string Serialize<T>(T ObjectToSerialize)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(ObjectToSerialize.GetType());

            using (StringWriter textWriter = new StringWriter())
            {
                xmlSerializer.Serialize(textWriter, ObjectToSerialize);
                return textWriter.ToString();
            }
        }
    }

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir