2010-12-14 145 views
0

我是新来的XML,所以请不要介意它太琐碎问题转换XML对象的层次结构对象并添加到列表

假设我有这样一个XML文件下面

<Person>  
     <Name>John-Jaime-Winston Junior</Name>  
    </Person> 
    <Person>  
     <Name>Steve</Name> 
    </person 

现在我将拥有一个人物对象,我可以知道如何读取xml并覆盖到一组对象。

最后我想要一个像所有人物一样的列表。

我无法获得启动如何做到这一点,因为我是新来的xml的

class person { 

string _name 

public string Name 
     { 
      get { return _name} 
      set { _name= value; } 
     } 

} 

在此先感谢

+0

事实是否真的XML你”重新使用? – ChaosPandion 2010-12-14 19:47:25

+0

@chaos pandioin,是的我使用XML,我只是一个示例代码,因为我不能发布我的整个XML,它几乎相同的概念 – kobe 2010-12-14 19:51:25

+0

仅供参考:该示例是无效的XML,因为XML需要有一个单一的根节点。建议将其改为像ChaosPandion的示例。 – StriplingWarrior 2010-12-14 20:10:49

回答

1

我想你想要像XmlSerializer,你可以序列化和反序列化这个对象。只是应界定公共性质

[Serializable()] 
public class person 
{ 

     string _name 

     public string Name 
     { 
      get { return _name} 
      set { _name= value; } 
     } 

} 

,并使用它:

 XmlSerializer serializer = new XmlSerializer(typeof(Person)); 
     StreamWriter sw = new StreamWriter("c:\\out.xml"); 
     serializer.Serialize(sw,new Person{Name = "Test"}); 
     sw.Close(); 


     StreamReader sr = new StreamReader("c:\\out.xml"); 
     var outVal = serializer.Deserialize(sr) as Person; 

但对于解析正常,您就可以使用的XDocument或XPath XML,...

+0

这就是我想要的,所以我可以写一个方法,可以通过任何类型的对象 – kobe 2010-12-14 21:04:21

+0

我正在寻找类似于上面的东西和一个普通的方法,需要人并自动转换为对象,我以某种方式实现它,如果你有更好的代码请发布。 – kobe 2010-12-15 05:26:56

+0

@gov,您应该阅读XmlSerializre链接我为您留下的序列化对象是一种正常的序列化方式,您也可以使用soap formatter,binaryformatter和DataContractSerializer来做它,例如在远程处理或WCF对象应该序列化发送和在接收器中,他们应该反序列化,这可以通过这种方式实现,说出你想要什么,如果我知道我会帮你:) – 2010-12-15 09:03:59

3

鉴于.NET 3.5和System.Xml.Linq的,这是很容易的。

var q = from e in XElement.Parse(xml).Elements() 
     select new Person() { 
      Name = e.Element("Name").Value 
     }; 

var p = q.ToList(); 

您需要提供有效的XML喜欢什么如下:

<People> 
    <Person> 
     <Name>Jim</Name> 
    </Person> 
    <Person> 
     <Name>Bill</Name> 
    </Person> 
</People> 
相关问题