парсинг строки типа xml - PullRequest
       7

парсинг строки типа xml

1 голос
/ 29 ноября 2011

У меня есть такая строка

<InitParams>
                <myparams>

                  <Ad>true</Ad>
                  <Ay>true</Ay>
                  <Sd>false</Sd>

                </myparams>
                <myContent>

                  <Item>
                      <IM>true</IM>
                      <AL>1234</AL>

                    </Item>

                </myContent>
              </InitParams>

Мне нужно значение между тегами <IM> и <AL>. Будучи новичком в C # и .net, не уверен, что будет лучшим способом сделать это. Читайте о xmlDoc и linq, но это звучит как излишество для этой небольшой потребности.

1 Ответ

3 голосов
/ 29 ноября 2011

Смысл чего-то вроде LINQ to XML состоял в том, чтобы предотвратить перерасход, потому что его так легко использовать:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Xml.Linq;



 namespace WhateverNamespaceYouWant
 {

    public class Item
    {
        public bool IM { get; set; }
        public int AL { get; set; }
    }
    public class ItemsRepository
    {
        public IEnumerable<Item> GetAllItemsInXML()
        {
            var _items = new List<Item>();
            var doc = XDocument.Load("this");
            // finds every node of Item
            doc.Descendants("Item").ToList()
            .ForEach(item =>
            {
                var myItem = new Item() // your domain type
                {
                    IM = item.Element("IM").Value.ConvertToValueType<bool>(),
                    AL = item.Element("AL").Value.ConvertToValueType<int>(),
                };
                _items.Add(myItem);
            });
            return _items;
        }
    }

    public static class Extensions
    {
        public static T ConvertToValueType<T>(this string str) where T : struct
        {
            try
            {
                return (T)Convert.ChangeType(str, typeof(T));
            }
            catch
            {
                return default(T);
            }
        }
    }

}
...