将XML解析为通用列表(同一节点中的XML元素)

时间:2015-08-05 14:15:34

标签: c# xml generics

我想将XMl字符串转换为通用列表。

我的XML代码:

<Color>
<t_options optionImage="1593-Black.png" optionid="4625050"  RowId=1 />
<t_options optionImage="1593-Red.png" optionid="4625051"  RowId=2 />
<t_options optionImage="1593-Blue.png" optionid="4625052"  RowId=3 />
<t_options optionImage="1593-Green.png" optionid="4625053"  RowId=4 />
</Color>

2 个答案:

答案 0 :(得分:1)

从System.Xml.Linq开始;您需要加载xml文件,然后解析文档。例如,

var doc = XDocument.Load("file.xml");
IEnumerable<XElement> elements = doc.Descendants(tagNameHere);

如果你想创建一个列表,你可以通过这样的方式访问这些元素:

List<string> myElements = new List<string>();
XElement element = elements.ElementAt(0);
myElements.Add(element.Value);

这只是为了让你入门。我建议你在这里阅读:

https://msdn.microsoft.com/en-us/library/system.xml.linq(v=vs.110).aspx

并对解析xml文件进行更多研究。

答案 1 :(得分:0)

我会使用XmlSerializer,因为你已经有一个你想要使用的定义良好的类。您只需要封装List部分,以便Serializer知道如何处理<Color>标记:

public class t_option
{
    [XmlAttribute]
    public string optionImage { get; set; } 

    [XmlAttribute]
    public string optionid { get; set; } 

    [XmlAttribute]
    public string RowId { get; set; }
}

public class Color
{
    public Color()
    {
        t_options = new List<t_option>();
    }

    [XmlElement("t_options")]
    public List<t_option> t_options {get; set;} 
}

public static void Main(string[] args)
{
    string xml = @"<Color>
  <t_options optionImage='1593-Black.png' optionid='4625050'  RowId='1' />
  <t_options optionImage='1593-Red.png' optionid='4625051'  RowId='2' />
  <t_options optionImage='1593-Blue.png' optionid='4625052'  RowId='3' />
  <t_options optionImage='1593-Green.png' optionid='4625053'  RowId='4' />
</Color>";

    XmlSerializer xser = new XmlSerializer(typeof(Color));

    using (XmlReader xr = XmlReader.Create(new StringReader(xml)))
    {
        xr.MoveToContent();
        Color c = (Color)xser.Deserialize(xr);
        Console.WriteLine(c.t_options.Count);
    }
    //   Console.WriteLine(l.Count);
    Console.ReadKey();
}

请注意,您的XML必须更正 - 属性值必须在引号中。