2011-11-12 40 views
0

你好,我叫讀取XML文檔中像下面C# - 有問題與讀取XML

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfSYMBOL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<SYMBOL Code="AA.P" Name="Alcoa Inc Pf 3.75" /> 
<SYMBOL Code="AADR" Name="Wcm Bny Focused Growth Adr ETF" /> 
<SYMBOL Code="AAU" Name="Almaden Minerals" /> 
<SYMBOL Code="AAVX" Name="Etracs Daily Short 1 Month S&amp;P" /> 
</ArrayOfSYMBOL> 

我怎麼會去把數據轉換成二維String數組,帶有符號然後名稱。

+0

我想你的意思是「代碼」,然後在「名稱」 –

+0

[?你嘗試過什麼(http://mattgemmell.com/2008/12/08/what-you-you-tried /) –

回答

6

如何使用一些更結構類似於Symbol類的列表:

class Symbol 
{ 
    public string Code { get; set; } 
    public string Name { get; set; } 
} 


XDocument doc = XDocument.Load("test.xml"); 
var symbols = doc.Descendants("SYMBOL") 
       .Select(x => new Symbol 
        { 
        Code = (string)x.Attribute("Code"), 
        Name = (string)x.Attribute("Name") 
        }) 
       .ToList(); 

這種方法,你可以在一個更易於閱讀和理解的方式訪問個人符號的優勢 - 而不是訪問數組中指數,這是容易出錯的,你可以使用適當命名的強類型類的屬性,即寫出你發現可能是所有符號:

foreach (var symbol in symbols) 
{ 
    Console.WriteLine("Symbol: {0} = {1}", symbol.Code, symbol.Name); 
} 

如果你只是在尋找一種方式來看待一個符號的名字給它的代碼,你也可以使用ToDictionary()

var symbolMap = doc.Descendants("SYMBOL") 
        .ToDictionary(x=> (string)x.Attribute("Code"), 
            x=> (string)x.Attribute("Name")); 

Console.WriteLine("Name for symbol {0} is {1}", "AA.P", symbolMap["AA.P"]); 
+0

感謝您的幫助 – slasher53

0
public class SYMBOL 
{ 
    [XmlAttribute("Code")]    
    public string Code { get; set; } 
    [XmlAttribute("Name")] 
    public string Name { get; set; } 
} 

XmlSerializer xml = new XmlSerializer(typeof(SYMBOL[])); 
SYMBOL[] symbols = (SYMBOL[])xml.Deserialize(aFileStream);