2013-02-08 155 views

回答

2
List<string> items = XDocument.Parse("the xml") 
         .Descendants("item") 
         .Select(item => item.Attribute("id").Value).ToList(); 

使用XDocument!

0

,最好的办法是解析XML。

反序列化它需要一个由XmlSerializer支持的方案,使用XDocument来解析它。

这里是系列化的示例:

定义类

public class item 
{ 
    [XmlAttribute("item")] 
    public string id { get; set; } 
} 

序列化

var xs = new XmlSerializer(typeof(item[])); 
xs.Serialize(File.Open(@"c:\Users\roman\Desktop\ser.xml", FileMode.OpenOrCreate), new item[] { new item { id = "1" }, new item { id = "1" }, new item { id = "1" } }); 

结果:

<?xml version="1.0"?> 
<ArrayOfItem xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <item item="1" /> 
    <item item="1" /> 
    <item item="1" /> 
</ArrayOfItem> 

正如你可以看到它使用了一个特殊的XML架构,使你的XML无法解析,这意味着你将不得不手动分析XML,使用的XDocument或XmlDocument的,还是先使用XmlSerializer的序列化数据,然后反序列化。

3

其实,这是可能的 - 答案here显示如何。只需将属性定义为数组,但用XmlElement

public class Item 
{ 
    [XmlAttribute("id")] 
    public int Id { get ;set; } 

    [XmlText] 
    public string Name { get; set; } 
} 

[XmlRoot("root")] 
public class Root 
{ 
    [XmlElement("item")] 
    public Item[] Items { get;set;} 
} 
+0

肯定答案 –