Linq To Xml

本文介绍了LinqToXML的基本概念及其在XML文件创建、检索和序列化中的应用。通过多个示例展示了如何使用LinqToXML进行XML数据的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linq To XMl

啥是Linq To Xml呢?

Linq To Xml就是通过Linq语句来快速检索Xml树或Xml文件,并从中获取相应的记录或对获取的记录进行相应的操作。用Linq来检索Xml文件比Xpath好用,用Linq来操作Xml文件比DOM好用。Linq To Xml 说白了就是XpathDOM的抽象,语法简单但功能却不简单。

废话不多说呀,咱来写几个案例。

案例1 如何使用Linq创建一个Xml文件

Xelement root=new Xelement(“Root”, New Xelement(“Child1”), New Xelement(“Child2”), New Xelement(“Child3”), New Xelement(“Child4”, New Xelement(“GrandChild1”), New Xelement(“GrandChild2”) )//child4 )//root Root.Save(“C:/MyTree.xml”);

只需这样,咱们就轻松的建立了一颗Xml树,它的结构如下:

<Root> <Child1></ Child1> <Child2></ Child2> <Child3></ Child3> <Child4> <GrandChild1></ GrandChild 1> <GrandChild2></ GrandChild 2> </ Child4> </Root>

如何用LinqXml树中获取相应的信息呢?接下来咱们对下面这颗xml数进行信息检索

<?xml version="1.0" encoding="utf-8"?> <MemoRoot> <Memo> <ID>41</ID> <MemoUser>ghostbear</MemoUser> <MemoContent>去家里洗澡燥</MemoContent> <MemoCreateTime>2011-02-13T20:31:45.453</MemoCreateTime> <MemoContentApplyTime>2011-02-14T00:00:00</MemoContentApplyTime> </Memo> <Memo> <ID>42</ID> <MemoUser>ghostbear</MemoUser> <MemoContent>去干洗店拿衣服</MemoContent> <MemoCreateTime>2011-02-13T20:32:06.203</MemoCreateTime> <MemoContentApplyTime>2011-02-14T00:00:00</MemoContentApplyTime> </Memo> <Memo> <ID>43</ID> <MemoUser>ghostbear</MemoUser> <MemoContent>回奶奶家继续研究Linq</MemoContent> <MemoCreateTime>2011-02-13T20:32:21.343</MemoCreateTime> <MemoContentApplyTime>2011-02-14T00:00:00</MemoContentApplyTime> </Memo> <Memo> <ID>44</ID> <MemoUser>ghostbear</MemoUser> <MemoContent>去姐姐家看望姐姐</MemoContent> <MemoCreateTime>2011-02-13T20:32:36.89</MemoCreateTime> <MemoContentApplyTime>2011-02-15T00:00:00</MemoContentApplyTime> </Memo> <Memo important=”true”> <ID>45</ID> <MemoUser>ghostbear</MemoUser> <MemoContent>打电话给中兴,说我不去培训</MemoContent> <MemoCreateTime>2011-02-13T20:33:11.39</MemoCreateTime> <MemoContentApplyTime>2011-02-14T00:00:00</MemoContentApplyTime> </Memo> <Memo> <ID>46</ID> <MemoUser>ghostbear</MemoUser> <MemoContent>去郭青店里玩玩</MemoContent> <MemoCreateTime>2011-02-13T20:33:39.563</MemoCreateTime> <MemoContentApplyTime>2011-02-16T00:00:00</MemoContentApplyTime> </Memo> <Memo> <ID>47</ID> <MemoUser>ghostbear</MemoUser> <MemoContent>去买19号的车票 </MemoContent> <MemoCreateTime>2011-02-13T20:34:50.64</MemoCreateTime> <MemoContentApplyTime>2011-02-17T00:00:00</MemoContentApplyTime> </Memo> <Memo> <ID>48</ID> <MemoUser>ghostbear</MemoUser> <MemoContent>回家呆呆</MemoContent> <MemoCreateTime>2011-02-13T20:35:13.907</MemoCreateTime> <MemoContentApplyTime>2011-02-18T00:00:00</MemoContentApplyTime> </Memo> <Memo> <ID>49</ID> <MemoUser>ghostbear</MemoUser> <MemoContent>坐车回学校咯</MemoContent> <MemoCreateTime>2011-02-13T20:35:28.407</MemoCreateTime> <MemoContentApplyTime>2011-02-19T00:00:00</MemoContentApplyTime> </Memo> <Memo important=”true”> <ID>50</ID> <MemoUser>ghostbear</MemoUser> <MemoContent>把存单给大姨</MemoContent> <MemoCreateTime>2011-02-17T13:56:20.827</MemoCreateTime> <MemoContentApplyTime>2011-02-18T00:00:00</MemoContentApplyTime> </Memo> </MemoRoot>

案例2 获取ID值介于40~45之间的Memo节点

Xelement root=Xelement.Load(“C:/MyTree.xml”); Var result=from memo in root.Descendants(“Memo”) Let id= int.parse(memo.Element(“ID”).Value) Where id>=40 && id<=45 Select memo Foreach(Xelement e in memo) Console.writeline(e.element(“ID”).Value+”/n”); 结果为: 41 42 43 44 45

案例3 获取属性Important=trueMemo节点

Xelement memo=Xelement.Load(“C:/MyTree.xml”); Var result=from m in memo.Descendants(“Memo”) Where m.Attribute[“important”]!=null && m.Attribute[“important”].Value==”true” Select m; Foreach(Xelement e in result) Console.WriteLine(e.Element(“ID”).Value); 结果为: 45 50

案例4 如何通过Linq使用节点的命名空间来检索信息

<?xml version="1.0" encoding="gb2312" ?> <root xmlns:bd="www.baidu.com" xmlns:gl="www.google.com"> <bd:website> <name>百度</name> <url>http://www.baidu.com</url> <port>80</port> </bd:website> <gl:website> <name>谷歌</name> <url>http://www.google.com</url> <port>80</port> </gl:website> <website> <name>搜狗</name> <url>http://www.sougou.com</url> <port>80</port> </website> </root>

咱们用这颗Xml树来测试

XElement myTree = XElement.Load("../../TestNamespace.xml"); var result1 = myTree.Descendants(XName.Get("website", "www.baidu.com")); var result2 = myTree.Descendants(XName.Get("website","www.google.com")); var result3 = myTree.Descendants("website"); foreach (XElement e in result1) { Console.WriteLine(e.Element("name").Value); } foreach (XElement e in result2) { Console.WriteLine(e.Element("name").Value); } foreach (XElement e in result3) { Console.WriteLine(e.Element("name").Value); } 结果为: 百度 谷歌 搜狗

案例5 Xml文件的序列化

Xml文件的序列化可以让文件更小,传输更便捷。咱们用案例1的Xml树来操作。 Xelement root=new Xelement(“Root”, New Xelement(“Child1”), New Xelement(“Child2”), New Xelement(“Child3”), New Xelement(“Child4”, New Xelement(“GrandChild1”), New Xelement(“GrandChild2”) )//child4 )//root Root.Save(“C:/MyTree.xml”,SaveOptions.DisableFormatting);

1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值