2011-11-29 92 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的環繞段代碼 –