XmlSerializer - 显示项目数组

本文关键字:项目数 数组 项目 显示 XmlSerializer | 更新日期: 2023-09-27 18:31:19

我有一个XML文件,看起来像这样:

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

我想将所有DOC放在一个数组中。如何在 C# (XmlSerializer) 中执行此操作?

XmlSerializer - 显示项目数组

实质上,您需要一个包含XML的字符串,一个用于读取字符串的StringReader,一个用于从StringReader读取源的XMLReader和一个用于存储来自XMLReader的源的XDocument。这可以在一行代码中完成,如下所示:

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

xmlString 是正在读取的文件的路径(和名称)。您应该使用 List 来存储您将获得的数据(除非它是固定数字,否则您只需使用 string[])。

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();

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

也许这取决于框架版本。我有 .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;
}

保持标签区分大小写。

这是正确的答案,基于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);
        }
    }