导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

LINQ to XML的问题

leon51 2020-03-29 05:18:58
类似以下xml,我想使用Linq方法将这四本书放在List<book>集合中,请问Linq应该怎么写,谢谢
<books>
<book name="三国演义" author="罗贯中" price= "55" count="3" ></book>
<book name="水浒传" author="施耐庵" price= "75" count="10" ></book>
<book name="西游记" author="吴承恩" price= "60" count="12" ></book>
<book name="红楼梦" author="曹雪芹" price= "80" count="2" ></book>
</books>


我这样写将所有书的属性取出来了,而不是分开每一本书
var result = from x in xDocument.Descendants("book").Attributes()
select new { x.Name, x.Value };
...全文
166 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajdkjalj 2020-03-30
你需要个book类,把name和value分别给book的属性赋值
回复
ajdkjalj 2020-03-30
引用 3 楼 leon51 的回复:
[quote=引用 2 楼 ajdkjalj 的回复:] 你需要个book类,把name和value分别给book的属性赋值
既然是List<book>集合,肯定需要book类啦。 问题是怎么分别把每一本书的name和value给取出来?[/quote] 你要把book类建出来啊,属性也写对应写出来,再select new book{Name=x.Name......},把各个字段赋值给book的属性就完了啊
回复
SayoKun 2020-03-30
这个其实没那么复杂,你首先需要根据xml建立一个实体。 按照你发的那个,实体应该是这样的


public List<book> books{get;set;}
public class book
{
public string name{get;set;}
public string author{get;set;}
public string price{get;set;}
public string count{get;set;}
}
当你拥有实体后,就需要将实体序列化为xml以及反序列化

using System.Xml.Serialization;
/// <summary>
        /// 将List(T)序列化为xml并以StringWriter返回
        /// </summary>
        /// <typeparam name="T">实体-可省略</typeparam>
        /// <param name="entity">传入List(实体)</param>
        /// <returns>返回StringWriter的字符串</returns>
        public static StringWriter ListToXml<T>(List<T> entity)
        {
            var writer = new XmlSerializer(typeof(List<T>));
            StringWriter str = new StringWriter();
            writer.Serialize(str, entity);
            return str;
        }
        /// <summary>
        /// 接收StringWriter后反序列化为List[实体]
        /// </summary>
        /// <typeparam name="T">实体-必须有不然无法反序列化</typeparam>
        /// <param name="stream">StringWriter的字符串</param>
        /// <returns>返回List[实体]</returns>
        public static List<T> XmlToList<T>(string stream)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<T>));
            StringReader strReader = new StringReader(stream);
            return (List<T>)xmlSerializer.Deserialize(strReader);
        }
以上就是大致的序列化
回复
leon51 2020-03-30
引用 2 楼 ajdkjalj 的回复:
你需要个book类,把name和value分别给book的属性赋值
既然是List<book>集合,肯定需要book类啦。 问题是怎么分别把每一本书的name和value给取出来?
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.