背景资讯 在过去,我一直在学习XML文件的集合并遍历每个XML文件,解析它,将字符串数据传递给数据传输对象并将对象传递到数据库中。
之前,我的XML看起来像这样。
<messages>
<message>
<title>Red Wall</title>
<summary>This is a good article</summary>
<ISBN>13546846545464</ISBN>
</message>
</messages>
在这里,我只有一个元素。因此,我将使用LINQ解析XML并检索后续元素(title,summary,isbn)。然后我将初始化/实例化一个对象,将其属性分配给我检索的值,并将其发送。
现在我的XML看起来像这样:
<messages>
<message>
<title>Red Wall</title>
<summary>This is a good article</summary>
<ISBN>13546846545464</ISBN>
</message>
<message>
<title>Blue Wall</title>
<summary>This is not a good article</summary>
<ISBN>15648465416</ISBN>
</message>
</messages>
我现在在我的XML文件中有两个(或更多)元素,对于每个我需要 1)确定有多个元素和 2)每个都创建一个单独的DTO来保存我解析的数据。
我的问题是:如何使用多个标记解析XML并将我遇到的每个标记识别为与另一个标记分开?
最后注意事项:在解析时,我需要能够实例化DTO来捕获我返回的信息。
感谢您的帮助!
答案 0 :(得分:2)
只需抓取您想要的元素,然后使用您的选择从子项填充dto。这样的东西没有经过测试
XElement ele = loaded.Element("messages");
dtos = from item in ele.Descendants("message")
select new DTO() {title = item.Element(title).value ,... };
答案 1 :(得分:0)
上面的select语句将返回一个IEnumerable&lt; DTO&gt;,它是一系列DTO对象。对于它在XML中找到的每个消息节点,它将创建一个DTO对象并将其添加到返回的序列中。如果您的目标只是迭代所有DTO,那么您已经在那里了。如果你确实需要一个List&lt; DTO&gt;,那么通用List对象上有一个构造函数,它接受一个IEnumerable&lt; T&gt;,所以你可以传入你从select语句收到的“dtos”并有一个List。