XmlSerializer - 显示项目数组
本文关键字:项目数 数组 项目 显示 XmlSerializer | 更新日期: 2023-09-27 18:31:19
我有一个XML文件,看起来像这样:
<ROOT><DOC> ... </DOC><DOC> ... </DOC><DOC> ... </DOC></ROOT>
我想将所有DOC放在一个数组中。如何在 C# (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);
}
}