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

本文关键字:XML 节点 元素 列表 | 更新日期: 2023-09-27 18:06:34

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

My XML code:

<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>

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

Start with 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文件做更多的研究。

我将使用XmlSerializer,因为您已经有了一个想要使用的定义良好的类。您只需要封装List部分,以便序列化器知道如何处理<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必须更正-属性值必须在引号中。