【问题标题】:Using XElement to parse this XML into an array使用 XElement 将此 XML 解析为数组
【发布时间】:2016-11-07 21:19:40
【问题描述】:

假设我有一个 Person 类:

public class Person
{
    public string Name { get; set; }
}

如何解析包含

的 XML 文件
<person>
    <name>a</name>
</person>
<person>
    <name>b</name>
</person>

放入两个Persons 的数组中?

这是这个问题的一个变体:Specific parsing XML into an array

唯一的区别是整个 XML 周围没有&lt;people&gt;&lt;/people&gt;&lt;person&gt;s 立即开始。

【问题讨论】:

  • 如果没有外根标签,则定义为无效的xml。您必须自己解析它,或修改字符串以使其有效。
  • 如果没有外部根标签,那么它是一个无效的 xml,就像@Jonesopolis 说的那样
  • 此“XML”无效,请参阅w3.org/TR/REC-xml/#dt-root。但是,如果您仍然需要将其加载到 XDocument 中,请参阅C# XDocument Load with multiple roots。或者你真的需要反序列化到List&lt;Person&gt;而不是加载到XElement

标签: c# .net xml linq linq-to-xml


【解决方案1】:

试试这个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml = 
                "<person>" +
                    "<name>a</name>" +
                "</person>" +
                "<person>" +
                    "<name>b</name>" +
                "</person>";
            xml = "<Root>" + xml + "</Root>";

            XDocument doc = XDocument.Parse(xml);

            List<Person> people = doc.Descendants("person").Select(x => new Person() {
                Name = (string)x.Element("name")
            }).ToList();
        }
    }
    public class Person
    {
        public string Name { get; set; }
    }
}

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多