2014-11-21 23 views
-1

数组我有一个看起来像这样的XML文件:XmlSerializer的 - 现在项目

<ROOT><DOC> ... </DOC><DOC> ... </DOC><DOC> ... </DOC></ROOT> 

我希望把所有的DOC在数组中。我如何在C#(XmlSerializer)中做到这一点?

+0

是的,你可以用XmlSerializer来做到这一点。 – Reniuz 2014-11-21 14:04:04

+0

或使用XDocument。 – 2014-11-21 14:08:19

+0

检查此问题http://stackoverflow.com/questions/364253/how-to-deserialize-xml-document – malkam 2014-11-21 14:09:34

回答

0

也许它取决于框架版本。我有.net v4,并将XmlSerializer与以下类一起使用。

感谢@Reniuz提示的错误。这是一个完整的工作示例:

public class Document 
{ 
    [XmlAttribute] 
    public string Value { get; set; } 
} 

[XmlRoot("ROOT")] 
public class Root 
{ 
    [XmlElement("DOC")] 
    public List<Document> Documents { get; set; } 
} 

使用此代码加载:

string data = "<ROOT><DOC Value=\"adhfjasdhf\"></DOC><DOC Value=\"asldfhalsdh\"></DOC></ROOT>"; 
XmlSerializer serializer = new XmlSerializer(typeof(Root)); 
using (StringReader sr = new StringReader(data)) 
{ 
    Root root = serializer.Deserialize(sr) as Root; 
} 

保持attantion该标记区分大小写。

+0

XmlElement可以应用于字段和属性。你会得到错误。对于根类使用XmlRoot属性 – Reniuz 2014-11-21 14:13:42

+0

但XmlRoot不帮我,因为我的数组是空的。 – 2014-11-21 14:24:44

+0

最后使用 Document [] documents = root.Documents.ToArray(); 获取数组。 – elite 2014-11-21 14:43:11

0

实质上,您需要一个包含XML的字符串,一个读取字符串的StringReader,一个从StringReader读取提要的XMLReader和一个用于存储XMLReader提要的XDocument。这可以在一个单一的代码行来完成,像这样:

XDocument xDoc = XDocument.Load (XmlReader.Create (new StringReader (xmlString))); 

的的xmlString是您正在阅读的文件的路径(和名称)。你应该使用List来存储你将得到的数据(除非它是一个设置的数字,那么你可以使用一个字符串[])。

List<string> docList = new List<string>(); 

然后,它使用foreach循环来遍历XML元素,并将它们添加到列表中的一个问题:

foreach (var element in xDoc.Descendants("ROOT")) 
{ 
    string doc = element.Element ("DOC").Value; 
    docList.Add (doc); 
} 

,使其成为一个数组,使用:

docList.ToArray(); 

我希望这有助于!祝你好运。

+0

它只适用于第一个项目,不适用于所有项目。 – 2014-11-21 14:30:15

+0

好的。如果您尝试这样做: foreach(xDoc.Element(“DOC”)中的var元素)值 { docList.Add(xDoc.Element(“DOC”)。Value); } – 2014-11-21 14:34:26

0

这是正确的答案,基于Magicbjorn答案:

首先,我从一个StreamReader得到我的字符串。

using(StreamReader read = new StreamReader("FilePath.xml")) 
    { 
     XDocument xDoc = XDocument.Load(XmlReader.Create(read)); 
     List<string> docList = new List<string>(); 

     var root = xDoc.Element("ROOT"); 
     foreach (var element in root.Elements("DOC")) 
     { 
      string s = element.Value; 
      docList.Add(s); 
     } 
    }