2011-11-29 69 views
1

我有一个字符串这样解析XML字符串类型

<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,但听起来像这个小需求的矫枉过正。

+2

没有什么错误使用的XML API来处理XML。事实上,这是正确的做法。 –

回答

3

的类似的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); 
      } 
     } 
    } 

} 
+0

我从来没有见过你可以做'Value.ConvertToValueType'我总是用'Convert.To ...'包装值' –

+0

ConvertToValueType 是我经常使用的扩展方法之一。 –

+0

噢,我看到了,我有一个Convert.to的环绕段代码 –