C# - 读取XML有问题

时间:2011-11-12 17:22:05

标签: c# .net xml

您好我正在阅读下面的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>

如何将数据放入带有SYMBOL Then Name的2D字符串数组中。

2 个答案:

答案 0 :(得分: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"]);

答案 1 :(得分: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);