2011-11-12 14 views
0

との問題を抱え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> 

の下にど​​のように私は、シンボル名を持つ2D文字列配列にデータを置くことについて行くようにこんにちは、私はXML文書で読んでいます。

+0

し、「名前」 –

+0

(http://mattgemmell.com/2008 [あなたが試みがありますか?]/12/08/what-have-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); 
関連する問題